From 7a03bda2ac4171cf05e1ac86d69b5ccfc3035eaf Mon Sep 17 00:00:00 2001 From: Narek Zakarian Date: Mon, 17 Feb 2025 17:18:10 +0400 Subject: [PATCH 01/45] Map the "Invoice prefix" --- modules/ppcp-compat/src/Settings/SettingsTabMapHelper.php | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/ppcp-compat/src/Settings/SettingsTabMapHelper.php b/modules/ppcp-compat/src/Settings/SettingsTabMapHelper.php index d3ce17290..5e43c7745 100644 --- a/modules/ppcp-compat/src/Settings/SettingsTabMapHelper.php +++ b/modules/ppcp-compat/src/Settings/SettingsTabMapHelper.php @@ -37,6 +37,7 @@ class SettingsTabMapHelper { 'subtotal_mismatch_behavior' => 'subtotal_adjustment', 'landing_page' => 'landing_page', 'smart_button_language' => 'button_language', + 'prefix' => 'invoice_prefix', ); } From 3e5f151bbb9d14db848def213bdd74490b07e9c0 Mon Sep 17 00:00:00 2001 From: Narek Zakarian Date: Mon, 17 Feb 2025 17:31:56 +0400 Subject: [PATCH 02/45] Map the "Order intent" --- .../src/Settings/SettingsTabMapHelper.php | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/modules/ppcp-compat/src/Settings/SettingsTabMapHelper.php b/modules/ppcp-compat/src/Settings/SettingsTabMapHelper.php index 5e43c7745..99f93c4ce 100644 --- a/modules/ppcp-compat/src/Settings/SettingsTabMapHelper.php +++ b/modules/ppcp-compat/src/Settings/SettingsTabMapHelper.php @@ -37,7 +37,8 @@ class SettingsTabMapHelper { 'subtotal_mismatch_behavior' => 'subtotal_adjustment', 'landing_page' => 'landing_page', 'smart_button_language' => 'button_language', - 'prefix' => 'invoice_prefix', + 'prefix' => 'invoice_prefix', + 'intent' => '', ); } @@ -58,6 +59,9 @@ class SettingsTabMapHelper { case 'landing_page': return $this->mapped_landing_page_value( $settings_model ); + case 'intent': + return $this->mapped_intent_value( $settings_model ); + default: return $settings_model[ $new_key ] ?? null; } @@ -99,4 +103,21 @@ class SettingsTabMapHelper { : ApplicationContext::LANDING_PAGE_NO_PREFERENCE ); } + + /** + * Retrieves the mapped value for the order intent from the new settings. + * + * @param array $settings_model The new settings model data as an array. + * @return 'AUTHORIZE'|'CAPTURE'|null The mapped 'intent' setting value. + */ + protected function mapped_intent_value( array $settings_model ): ?string { + $authorize_only = $settings_model['authorize_only'] ?? null; + $capture_virtual_orders = $settings_model['capture_virtual_orders'] ?? null; + + if ( is_null( $authorize_only ) && is_null( $capture_virtual_orders ) ) { + return null; + } + + return $authorize_only ? 'AUTHORIZE' : 'CAPTURE'; + } } From 228861ee89ffa80c64b074f8ae2bbfe0c22a8770 Mon Sep 17 00:00:00 2001 From: Narek Zakarian Date: Mon, 17 Feb 2025 17:33:53 +0400 Subject: [PATCH 03/45] Map the "vaulting" --- modules/ppcp-compat/src/Settings/SettingsTabMapHelper.php | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/ppcp-compat/src/Settings/SettingsTabMapHelper.php b/modules/ppcp-compat/src/Settings/SettingsTabMapHelper.php index 99f93c4ce..5f3654366 100644 --- a/modules/ppcp-compat/src/Settings/SettingsTabMapHelper.php +++ b/modules/ppcp-compat/src/Settings/SettingsTabMapHelper.php @@ -39,6 +39,7 @@ class SettingsTabMapHelper { 'smart_button_language' => 'button_language', 'prefix' => 'invoice_prefix', 'intent' => '', + 'vault_enabled' => 'save_paypal_and_venmo', ); } From 0cdb46dfa6bdfd215cc713a79b29b5619d2bc912 Mon Sep 17 00:00:00 2001 From: Narek Zakarian Date: Mon, 17 Feb 2025 17:34:41 +0400 Subject: [PATCH 04/45] Map the vaulting for the Credit and Debit Cards --- modules/ppcp-compat/src/Settings/SettingsTabMapHelper.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/ppcp-compat/src/Settings/SettingsTabMapHelper.php b/modules/ppcp-compat/src/Settings/SettingsTabMapHelper.php index 5f3654366..79a449d20 100644 --- a/modules/ppcp-compat/src/Settings/SettingsTabMapHelper.php +++ b/modules/ppcp-compat/src/Settings/SettingsTabMapHelper.php @@ -39,7 +39,7 @@ class SettingsTabMapHelper { 'smart_button_language' => 'button_language', 'prefix' => 'invoice_prefix', 'intent' => '', - 'vault_enabled' => 'save_paypal_and_venmo', + 'vault_enabled_dcc' => 'save_card_details', ); } From a71f687bcff142596057bb0f1513dc730a24f268 Mon Sep 17 00:00:00 2001 From: Narek Zakarian Date: Mon, 17 Feb 2025 17:36:20 +0400 Subject: [PATCH 05/45] Map the "Pay Now Experience" --- .../src/Settings/SettingsTabMapHelper.php | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/modules/ppcp-compat/src/Settings/SettingsTabMapHelper.php b/modules/ppcp-compat/src/Settings/SettingsTabMapHelper.php index 79a449d20..3e5ccfbdb 100644 --- a/modules/ppcp-compat/src/Settings/SettingsTabMapHelper.php +++ b/modules/ppcp-compat/src/Settings/SettingsTabMapHelper.php @@ -30,16 +30,17 @@ class SettingsTabMapHelper { */ public function map(): array { return array( - 'disable_cards' => 'disabled_cards', - 'brand_name' => 'brand_name', - 'soft_descriptor' => 'soft_descriptor', - 'payee_preferred' => 'instant_payments_only', - 'subtotal_mismatch_behavior' => 'subtotal_adjustment', - 'landing_page' => 'landing_page', - 'smart_button_language' => 'button_language', - 'prefix' => 'invoice_prefix', - 'intent' => '', - 'vault_enabled_dcc' => 'save_card_details', + 'disable_cards' => 'disabled_cards', + 'brand_name' => 'brand_name', + 'soft_descriptor' => 'soft_descriptor', + 'payee_preferred' => 'instant_payments_only', + 'subtotal_mismatch_behavior' => 'subtotal_adjustment', + 'landing_page' => 'landing_page', + 'smart_button_language' => 'button_language', + 'prefix' => 'invoice_prefix', + 'intent' => '', + 'vault_enabled_dcc' => 'save_card_details', + 'blocks_final_review_enabled' => 'enable_pay_now', ); } From c1b1f47bbeecf50a89c83e49c9208c647c3d3cdd Mon Sep 17 00:00:00 2001 From: Narek Zakarian Date: Mon, 17 Feb 2025 17:52:48 +0400 Subject: [PATCH 06/45] Fix the "Pay Now Experience" mapping value --- .../src/Settings/SettingsTabMapHelper.php | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/modules/ppcp-compat/src/Settings/SettingsTabMapHelper.php b/modules/ppcp-compat/src/Settings/SettingsTabMapHelper.php index 3e5ccfbdb..fddb31f99 100644 --- a/modules/ppcp-compat/src/Settings/SettingsTabMapHelper.php +++ b/modules/ppcp-compat/src/Settings/SettingsTabMapHelper.php @@ -64,6 +64,9 @@ class SettingsTabMapHelper { case 'intent': return $this->mapped_intent_value( $settings_model ); + case 'blocks_final_review_enabled': + return $this->mapped_pay_now_value( $settings_model ); + default: return $settings_model[ $new_key ] ?? null; } @@ -122,4 +125,20 @@ class SettingsTabMapHelper { return $authorize_only ? 'AUTHORIZE' : 'CAPTURE'; } + + /** + * Retrieves the mapped value for the "Pay Now Experience" from the new settings. + * + * @param array $settings_model The new settings model data as an array. + * @return bool|null The mapped 'Pay Now Experience' setting value. + */ + protected function mapped_pay_now_value( array $settings_model ): ?bool { + $enable_pay_now = $settings_model['enable_pay_now'] ?? null; + + if ( is_null( $enable_pay_now ) ) { + return null; + } + + return ! $enable_pay_now; + } } From 7d2b0694d9e004f9d262b11712b9bdd6b475133a Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Mon, 17 Feb 2025 16:42:22 +0100 Subject: [PATCH 07/45] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Refactor=20condition?= =?UTF-8?q?s=20inside=20services.php?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/ppcp-applepay/services.php | 4 ++-- modules/ppcp-button/services.php | 4 ++-- modules/ppcp-googlepay/services.php | 4 ++-- modules/ppcp-wc-gateway/services.php | 13 ++++++------- 4 files changed, 12 insertions(+), 13 deletions(-) diff --git a/modules/ppcp-applepay/services.php b/modules/ppcp-applepay/services.php index 586a300ae..2633bbe12 100644 --- a/modules/ppcp-applepay/services.php +++ b/modules/ppcp-applepay/services.php @@ -260,8 +260,8 @@ return array( }, 'applepay.settings.connection.status-text' => static function ( ContainerInterface $container ): string { - $state = $container->get( 'onboarding.state' ); - if ( $state->current_state() < State::STATE_ONBOARDED ) { + $is_connected = $container->get( 'settings.flag.is-connected' ); + if ( ! $is_connected ) { return ''; } diff --git a/modules/ppcp-button/services.php b/modules/ppcp-button/services.php index 5a489d330..dbb271686 100644 --- a/modules/ppcp-button/services.php +++ b/modules/ppcp-button/services.php @@ -125,8 +125,8 @@ return array( } } - $state = $container->get( 'onboarding.state' ); - if ( $state->current_state() !== State::STATE_ONBOARDED ) { + $is_connected = $container->get( 'settings.flag.is-connected' ); + if ( ! $is_connected ) { return new DisabledSmartButton(); } diff --git a/modules/ppcp-googlepay/services.php b/modules/ppcp-googlepay/services.php index f92aa0bd8..5291204c2 100644 --- a/modules/ppcp-googlepay/services.php +++ b/modules/ppcp-googlepay/services.php @@ -221,8 +221,8 @@ return array( }, 'googlepay.settings.connection.status-text' => static function ( ContainerInterface $container ): string { - $state = $container->get( 'onboarding.state' ); - if ( $state->current_state() < State::STATE_ONBOARDED ) { + $is_connected = $container->get( 'settings.flag.is-connected' ); + if ( ! $is_connected ) { return ''; } diff --git a/modules/ppcp-wc-gateway/services.php b/modules/ppcp-wc-gateway/services.php index 77c6438e3..cb875dbce 100644 --- a/modules/ppcp-wc-gateway/services.php +++ b/modules/ppcp-wc-gateway/services.php @@ -321,10 +321,9 @@ return array( $section = isset( $_GET['section'] ) ? sanitize_text_field( wp_unslash( $_GET['section'] ) ) : ''; $ppcp_tab = isset( $_GET[ SectionsRenderer::KEY ] ) ? sanitize_text_field( wp_unslash( $_GET[ SectionsRenderer::KEY ] ) ) : ''; - $state = $container->get( 'onboarding.state' ); - assert( $state instanceof State ); + $is_connected = $container->get( 'settings.flag.is-connected' ); - if ( ! $ppcp_tab && PayPalGateway::ID === $section && $state->current_state() !== State::STATE_ONBOARDED ) { + if ( ! $ppcp_tab && PayPalGateway::ID === $section && ! $is_connected ) { return Settings::CONNECTION_TAB_ID; } @@ -1717,8 +1716,8 @@ return array( return 'https://www.paypal.com/bizsignup/entry?product=ADVANCED_VAULTING'; }, 'wcgateway.settings.connection.dcc-status-text' => static function ( ContainerInterface $container ): string { - $state = $container->get( 'onboarding.state' ); - if ( $state->current_state() < State::STATE_ONBOARDED ) { + $is_connected = $container->get( 'settings.flag.is-connected' ); + if ( ! $is_connected ) { return ''; } @@ -1788,8 +1787,8 @@ return array( ); }, 'wcgateway.settings.connection.pui-status-text' => static function ( ContainerInterface $container ): string { - $state = $container->get( 'onboarding.state' ); - if ( $state->current_state() < State::STATE_ONBOARDED ) { + $is_connected = $container->get( 'settings.flag.is-connected' ); + if ( ! $is_connected ) { return ''; } From a3fbe6f19f70f8ca2e878d4f632b28c1c29b8522 Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Mon, 17 Feb 2025 16:46:12 +0100 Subject: [PATCH 08/45] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Refactor=20EarlyOrde?= =?UTF-8?q?rHandler?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/ppcp-button/services.php | 10 +++++----- .../ppcp-button/src/Helper/EarlyOrderHandler.php | 14 +++++++------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/modules/ppcp-button/services.php b/modules/ppcp-button/services.php index dbb271686..faedc98be 100644 --- a/modules/ppcp-button/services.php +++ b/modules/ppcp-button/services.php @@ -241,11 +241,11 @@ return array( ); }, 'button.helper.early-order-handler' => static function ( ContainerInterface $container ) : EarlyOrderHandler { - - $state = $container->get( 'onboarding.state' ); - $order_processor = $container->get( 'wcgateway.order-processor' ); - $session_handler = $container->get( 'session.handler' ); - return new EarlyOrderHandler( $state, $order_processor, $session_handler ); + return new EarlyOrderHandler( + $container->get( 'settings.flag.is-connected' ), + $container->get( 'wcgateway.order-processor' ), + $container->get( 'session.handler' ) + ); }, 'button.endpoint.approve-order' => static function ( ContainerInterface $container ): ApproveOrderEndpoint { $request_data = $container->get( 'button.request-data' ); diff --git a/modules/ppcp-button/src/Helper/EarlyOrderHandler.php b/modules/ppcp-button/src/Helper/EarlyOrderHandler.php index 46b4ddf41..e3cac3131 100644 --- a/modules/ppcp-button/src/Helper/EarlyOrderHandler.php +++ b/modules/ppcp-button/src/Helper/EarlyOrderHandler.php @@ -23,11 +23,11 @@ use WooCommerce\PayPalCommerce\WcGateway\Processor\OrderProcessor; class EarlyOrderHandler { /** - * The State. + * Whether the merchant is connected to PayPal (onboarding completed). * - * @var State + * @var bool */ - private $state; + private bool $is_connected; /** * The Order Processor. @@ -46,17 +46,17 @@ class EarlyOrderHandler { /** * EarlyOrderHandler constructor. * - * @param State $state The State. + * @param bool $is_connected Whether onboarding was completed. * @param OrderProcessor $order_processor The Order Processor. * @param SessionHandler $session_handler The Session Handler. */ public function __construct( - State $state, + bool $is_connected, OrderProcessor $order_processor, SessionHandler $session_handler ) { - $this->state = $state; + $this->is_connected = $is_connected; $this->order_processor = $order_processor; $this->session_handler = $session_handler; } @@ -67,7 +67,7 @@ class EarlyOrderHandler { * @return bool */ public function should_create_early_order(): bool { - return $this->state->current_state() === State::STATE_ONBOARDED; + return $this->is_connected; } //phpcs:disable WordPress.Security.NonceVerification.Recommended From 8b76e5fcb7d5a6ca86effd73f770cfb0c71426e1 Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Mon, 17 Feb 2025 16:47:59 +0100 Subject: [PATCH 09/45] =?UTF-8?q?=F0=9F=92=A1=20Comment=20OnboardingRESTCo?= =?UTF-8?q?ntroller?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/ppcp-onboarding/src/OnboardingRESTController.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/ppcp-onboarding/src/OnboardingRESTController.php b/modules/ppcp-onboarding/src/OnboardingRESTController.php index d95b0a9d3..863bed599 100644 --- a/modules/ppcp-onboarding/src/OnboardingRESTController.php +++ b/modules/ppcp-onboarding/src/OnboardingRESTController.php @@ -136,6 +136,8 @@ class OnboardingRESTController { $environment = $this->container->get( 'onboarding.environment' ); $state = $this->container->get( 'onboarding.state' ); + // Legacy onboarding module; using `State::STATE_ONBOARDED` checks is valid here. + return array( 'environment' => $environment->current_environment(), 'onboarded' => ( $state->current_state() >= State::STATE_ONBOARDED ), From d852a7bea99ca9df0d098e89b4ca4f9ed103809f Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Mon, 17 Feb 2025 16:51:11 +0100 Subject: [PATCH 10/45] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Refactor=20PayUponIn?= =?UTF-8?q?voice?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/ppcp-wc-gateway/services.php | 2 +- .../src/Gateway/PayUponInvoice/PayUponInvoice.php | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/modules/ppcp-wc-gateway/services.php b/modules/ppcp-wc-gateway/services.php index cb875dbce..bad9f9579 100644 --- a/modules/ppcp-wc-gateway/services.php +++ b/modules/ppcp-wc-gateway/services.php @@ -1523,7 +1523,7 @@ return array( $container->get( 'wcgateway.pay-upon-invoice-order-endpoint' ), $container->get( 'woocommerce.logger.woocommerce' ), $container->get( 'wcgateway.settings' ), - $container->get( 'onboarding.state' ), + $container->get( 'settings.flag.is-connected' ), $container->get( 'wcgateway.current-ppcp-settings-page-id' ), $container->get( 'wcgateway.pay-upon-invoice-product-status' ), $container->get( 'wcgateway.pay-upon-invoice-helper' ), diff --git a/modules/ppcp-wc-gateway/src/Gateway/PayUponInvoice/PayUponInvoice.php b/modules/ppcp-wc-gateway/src/Gateway/PayUponInvoice/PayUponInvoice.php index 5b1fc0d36..12412d916 100644 --- a/modules/ppcp-wc-gateway/src/Gateway/PayUponInvoice/PayUponInvoice.php +++ b/modules/ppcp-wc-gateway/src/Gateway/PayUponInvoice/PayUponInvoice.php @@ -62,11 +62,11 @@ class PayUponInvoice { protected $pui_helper; /** - * The onboarding state. + * Whether onboarding was completed and the merchant is connected to PayPal. * - * @var State + * @var bool */ - protected $state; + protected bool $is_connected; /** * Current PayPal settings page id. @@ -102,7 +102,7 @@ class PayUponInvoice { * @param PayUponInvoiceOrderEndpoint $pui_order_endpoint The PUI order endpoint. * @param LoggerInterface $logger The logger. * @param Settings $settings The settings. - * @param State $state The onboarding state. + * @param bool $is_connected Whether onboarding was completed. * @param string $current_ppcp_settings_page_id Current PayPal settings page id. * @param PayUponInvoiceProductStatus $pui_product_status The PUI product status. * @param PayUponInvoiceHelper $pui_helper The PUI helper. @@ -113,7 +113,7 @@ class PayUponInvoice { PayUponInvoiceOrderEndpoint $pui_order_endpoint, LoggerInterface $logger, Settings $settings, - State $state, + bool $is_connected, string $current_ppcp_settings_page_id, PayUponInvoiceProductStatus $pui_product_status, PayUponInvoiceHelper $pui_helper, @@ -123,7 +123,7 @@ class PayUponInvoice { $this->pui_order_endpoint = $pui_order_endpoint; $this->logger = $logger; $this->settings = $settings; - $this->state = $state; + $this->is_connected = $is_connected; $this->current_ppcp_settings_page_id = $current_ppcp_settings_page_id; $this->pui_product_status = $pui_product_status; $this->pui_helper = $pui_helper; @@ -437,7 +437,7 @@ class PayUponInvoice { function ( $methods ) { if ( ! is_array( $methods ) - || State::STATE_ONBOARDED !== $this->state->current_state() + || ! $this->is_connected // phpcs:ignore WordPress.Security.NonceVerification.Recommended || ! ( is_checkout() || isset( $_GET['pay_for_order'] ) && $_GET['pay_for_order'] === 'true' ) ) { From fcb9ae488ab27dc89d0f89fad29a95a70f7b991c Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Mon, 17 Feb 2025 16:55:18 +0100 Subject: [PATCH 11/45] =?UTF-8?q?=F0=9F=94=A5=20Remove=20unused=20?= =?UTF-8?q?=E2=80=9Cuse=E2=80=9D=20statements?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/ppcp-applepay/services.php | 1 - modules/ppcp-button/services.php | 1 - modules/ppcp-googlepay/services.php | 1 - .../src/Gateway/PayUponInvoice/PayUponInvoice.php | 1 - 4 files changed, 4 deletions(-) diff --git a/modules/ppcp-applepay/services.php b/modules/ppcp-applepay/services.php index 2633bbe12..1d4e10c78 100644 --- a/modules/ppcp-applepay/services.php +++ b/modules/ppcp-applepay/services.php @@ -20,7 +20,6 @@ use WooCommerce\PayPalCommerce\Applepay\Helper\ApmApplies; use WooCommerce\PayPalCommerce\Applepay\Helper\AvailabilityNotice; use WooCommerce\PayPalCommerce\Common\Pattern\SingletonDecorator; use WooCommerce\PayPalCommerce\WcGateway\Helper\Environment; -use WooCommerce\PayPalCommerce\Onboarding\State; use WooCommerce\PayPalCommerce\Vendor\Psr\Container\ContainerInterface; return array( diff --git a/modules/ppcp-button/services.php b/modules/ppcp-button/services.php index faedc98be..da4156216 100644 --- a/modules/ppcp-button/services.php +++ b/modules/ppcp-button/services.php @@ -36,7 +36,6 @@ use WooCommerce\PayPalCommerce\Button\Helper\EarlyOrderHandler; use WooCommerce\PayPalCommerce\Button\Helper\MessagesApply; use WooCommerce\PayPalCommerce\Button\Helper\ThreeDSecure; use WooCommerce\PayPalCommerce\WcGateway\Helper\Environment; -use WooCommerce\PayPalCommerce\Onboarding\State; use WooCommerce\PayPalCommerce\WcGateway\Helper\SettingsStatus; use WooCommerce\PayPalCommerce\WcGateway\Helper\DCCGatewayConfiguration; diff --git a/modules/ppcp-googlepay/services.php b/modules/ppcp-googlepay/services.php index 5291204c2..045ececa8 100644 --- a/modules/ppcp-googlepay/services.php +++ b/modules/ppcp-googlepay/services.php @@ -19,7 +19,6 @@ use WooCommerce\PayPalCommerce\Googlepay\Helper\ApmApplies; use WooCommerce\PayPalCommerce\Googlepay\Helper\ApmProductStatus; use WooCommerce\PayPalCommerce\Googlepay\Helper\AvailabilityNotice; use WooCommerce\PayPalCommerce\WcGateway\Helper\Environment; -use WooCommerce\PayPalCommerce\Onboarding\State; use WooCommerce\PayPalCommerce\Vendor\Psr\Container\ContainerInterface; return array( diff --git a/modules/ppcp-wc-gateway/src/Gateway/PayUponInvoice/PayUponInvoice.php b/modules/ppcp-wc-gateway/src/Gateway/PayUponInvoice/PayUponInvoice.php index 12412d916..7ed9532e8 100644 --- a/modules/ppcp-wc-gateway/src/Gateway/PayUponInvoice/PayUponInvoice.php +++ b/modules/ppcp-wc-gateway/src/Gateway/PayUponInvoice/PayUponInvoice.php @@ -19,7 +19,6 @@ use WooCommerce\PayPalCommerce\Button\Exception\RuntimeException; use WooCommerce\PayPalCommerce\WcGateway\Gateway\PayPalGateway; use WooCommerce\PayPalCommerce\WcGateway\Helper\CheckoutHelper; use WooCommerce\PayPalCommerce\WcGateway\Helper\PayUponInvoiceHelper; -use WooCommerce\PayPalCommerce\Onboarding\State; use WooCommerce\PayPalCommerce\WcGateway\Helper\PayUponInvoiceProductStatus; use WooCommerce\PayPalCommerce\WcGateway\Processor\TransactionIdHandlingTrait; use WooCommerce\PayPalCommerce\WcGateway\Settings\Settings; From 262d3abd269adefc1d31c97bf9e08194aaba5866 Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Mon, 17 Feb 2025 16:55:53 +0100 Subject: [PATCH 12/45] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Refactor=20PayUponIn?= =?UTF-8?q?voiceGateway?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/ppcp-wc-gateway/services.php | 2 +- .../PayUponInvoice/PayUponInvoiceGateway.php | 15 +++------------ 2 files changed, 4 insertions(+), 13 deletions(-) diff --git a/modules/ppcp-wc-gateway/services.php b/modules/ppcp-wc-gateway/services.php index bad9f9579..ac8b54f85 100644 --- a/modules/ppcp-wc-gateway/services.php +++ b/modules/ppcp-wc-gateway/services.php @@ -1489,7 +1489,7 @@ return array( $container->get( 'woocommerce.logger.woocommerce' ), $container->get( 'wcgateway.pay-upon-invoice-helper' ), $container->get( 'wcgateway.checkout-helper' ), - $container->get( 'onboarding.state' ), + $container->get( 'settings.flag.is-connected' ), $container->get( 'wcgateway.processor.refunds' ), $container->get( 'wcgateway.url' ) ); diff --git a/modules/ppcp-wc-gateway/src/Gateway/PayUponInvoice/PayUponInvoiceGateway.php b/modules/ppcp-wc-gateway/src/Gateway/PayUponInvoice/PayUponInvoiceGateway.php index ecd6c1df1..1622123bc 100644 --- a/modules/ppcp-wc-gateway/src/Gateway/PayUponInvoice/PayUponInvoiceGateway.php +++ b/modules/ppcp-wc-gateway/src/Gateway/PayUponInvoice/PayUponInvoiceGateway.php @@ -17,7 +17,6 @@ use WooCommerce\PayPalCommerce\ApiClient\Endpoint\PayUponInvoiceOrderEndpoint; use WooCommerce\PayPalCommerce\ApiClient\Exception\PayPalApiException; use WooCommerce\PayPalCommerce\ApiClient\Factory\PurchaseUnitFactory; use WooCommerce\PayPalCommerce\WcGateway\Helper\Environment; -use WooCommerce\PayPalCommerce\Onboarding\State; use WooCommerce\PayPalCommerce\WcGateway\Gateway\TransactionUrlProvider; use WooCommerce\PayPalCommerce\WcGateway\Helper\CheckoutHelper; use WooCommerce\PayPalCommerce\WcGateway\Helper\PayUponInvoiceHelper; @@ -89,13 +88,6 @@ class PayUponInvoiceGateway extends WC_Payment_Gateway { */ protected $checkout_helper; - /** - * The onboarding state. - * - * @var State - */ - protected $state; - /** * The refund processor. * @@ -121,7 +113,7 @@ class PayUponInvoiceGateway extends WC_Payment_Gateway { * @param LoggerInterface $logger The logger. * @param PayUponInvoiceHelper $pui_helper The PUI helper. * @param CheckoutHelper $checkout_helper The checkout helper. - * @param State $state The onboarding state. + * @param bool $is_connected Whether the onboarding was completed. * @param RefundProcessor $refund_processor The refund processor. * @param string $module_url The module URL. */ @@ -134,7 +126,7 @@ class PayUponInvoiceGateway extends WC_Payment_Gateway { LoggerInterface $logger, PayUponInvoiceHelper $pui_helper, CheckoutHelper $checkout_helper, - State $state, + bool $is_connected, RefundProcessor $refund_processor, string $module_url ) { @@ -169,8 +161,7 @@ class PayUponInvoiceGateway extends WC_Payment_Gateway { $this->module_url = $module_url; $this->icon = apply_filters( 'woocommerce_paypal_payments_pay_upon_invoice_gateway_icon', esc_url( $this->module_url ) . 'assets/images/ratepay.svg' ); - $this->state = $state; - if ( $state->current_state() === State::STATE_ONBOARDED ) { + if ( $is_connected ) { $this->supports = array( 'refunds' ); } $this->refund_processor = $refund_processor; From 6294dcac52c9e30330aee8a3641660fb340c2c8e Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Mon, 17 Feb 2025 16:57:41 +0100 Subject: [PATCH 13/45] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Refactor=20CardButto?= =?UTF-8?q?nGateway?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/ppcp-wc-gateway/services.php | 2 +- .../src/Gateway/CardButtonGateway.php | 15 +++------------ 2 files changed, 4 insertions(+), 13 deletions(-) diff --git a/modules/ppcp-wc-gateway/services.php b/modules/ppcp-wc-gateway/services.php index ac8b54f85..aa734dec4 100644 --- a/modules/ppcp-wc-gateway/services.php +++ b/modules/ppcp-wc-gateway/services.php @@ -234,7 +234,7 @@ return array( $container->get( 'wcgateway.settings' ), $container->get( 'session.handler' ), $container->get( 'wcgateway.processor.refunds' ), - $container->get( 'onboarding.state' ), + $container->get( 'settings.flag.is-connected' ), $container->get( 'wcgateway.transaction-url-provider' ), $container->get( 'wc-subscriptions.helper' ), $container->get( 'wcgateway.settings.allow_card_button_gateway.default' ), diff --git a/modules/ppcp-wc-gateway/src/Gateway/CardButtonGateway.php b/modules/ppcp-wc-gateway/src/Gateway/CardButtonGateway.php index 846f8e7e3..783770ad2 100644 --- a/modules/ppcp-wc-gateway/src/Gateway/CardButtonGateway.php +++ b/modules/ppcp-wc-gateway/src/Gateway/CardButtonGateway.php @@ -14,7 +14,6 @@ use Psr\Log\LoggerInterface; use WC_Order; use WooCommerce\PayPalCommerce\ApiClient\Exception\PayPalApiException; use WooCommerce\PayPalCommerce\WcGateway\Helper\Environment; -use WooCommerce\PayPalCommerce\Onboarding\State; use WooCommerce\PayPalCommerce\Session\SessionHandler; use WooCommerce\PayPalCommerce\WcSubscriptions\FreeTrialHandlerTrait; use WooCommerce\PayPalCommerce\WcSubscriptions\Helper\SubscriptionHelper; @@ -70,13 +69,6 @@ class CardButtonGateway extends \WC_Payment_Gateway { */ private $refund_processor; - /** - * The state. - * - * @var State - */ - protected $state; - /** * Service able to provide transaction url for an order. * @@ -141,7 +133,7 @@ class CardButtonGateway extends \WC_Payment_Gateway { * @param ContainerInterface $config The settings. * @param SessionHandler $session_handler The Session Handler. * @param RefundProcessor $refund_processor The Refund Processor. - * @param State $state The state. + * @param bool $is_connected Whether onboarding was completed. * @param TransactionUrlProvider $transaction_url_provider Service providing transaction view URL based on order. * @param SubscriptionHelper $subscription_helper The subscription helper. * @param bool $default_enabled Whether the gateway should be enabled by default. @@ -157,7 +149,7 @@ class CardButtonGateway extends \WC_Payment_Gateway { ContainerInterface $config, SessionHandler $session_handler, RefundProcessor $refund_processor, - State $state, + bool $is_connected, TransactionUrlProvider $transaction_url_provider, SubscriptionHelper $subscription_helper, bool $default_enabled, @@ -173,12 +165,11 @@ class CardButtonGateway extends \WC_Payment_Gateway { $this->config = $config; $this->session_handler = $session_handler; $this->refund_processor = $refund_processor; - $this->state = $state; $this->transaction_url_provider = $transaction_url_provider; $this->subscription_helper = $subscription_helper; $this->default_enabled = $default_enabled; $this->environment = $environment; - $this->onboarded = $state->current_state() === State::STATE_ONBOARDED; + $this->onboarded = $is_connected; $this->payment_token_repository = $payment_token_repository; $this->logger = $logger; $this->paypal_checkout_url_factory = $paypal_checkout_url_factory; From 1a2eabe7caa450412e36440c55ff4da6d8704d82 Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Mon, 17 Feb 2025 17:02:54 +0100 Subject: [PATCH 14/45] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Refactor=20PayPalGat?= =?UTF-8?q?eway?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/ppcp-wc-gateway/services.php | 3 +-- .../ppcp-wc-gateway/src/Gateway/PayPalGateway.php | 15 +++------------ 2 files changed, 4 insertions(+), 14 deletions(-) diff --git a/modules/ppcp-wc-gateway/services.php b/modules/ppcp-wc-gateway/services.php index aa734dec4..c5c8922e8 100644 --- a/modules/ppcp-wc-gateway/services.php +++ b/modules/ppcp-wc-gateway/services.php @@ -93,7 +93,6 @@ return array( $settings = $container->get( 'wcgateway.settings' ); $session_handler = $container->get( 'session.handler' ); $refund_processor = $container->get( 'wcgateway.processor.refunds' ); - $state = $container->get( 'onboarding.state' ); $transaction_url_provider = $container->get( 'wcgateway.transaction-url-provider' ); $subscription_helper = $container->get( 'wc-subscriptions.helper' ); $page_id = $container->get( 'wcgateway.current-ppcp-settings-page-id' ); @@ -108,7 +107,7 @@ return array( $settings, $session_handler, $refund_processor, - $state, + $container->get( 'settings.flag.is-connected' ), $transaction_url_provider, $subscription_helper, $page_id, diff --git a/modules/ppcp-wc-gateway/src/Gateway/PayPalGateway.php b/modules/ppcp-wc-gateway/src/Gateway/PayPalGateway.php index 9dc975b82..02f825a42 100644 --- a/modules/ppcp-wc-gateway/src/Gateway/PayPalGateway.php +++ b/modules/ppcp-wc-gateway/src/Gateway/PayPalGateway.php @@ -19,7 +19,6 @@ use WooCommerce\PayPalCommerce\ApiClient\Entity\OrderStatus; use WooCommerce\PayPalCommerce\ApiClient\Entity\PaymentToken; use WooCommerce\PayPalCommerce\ApiClient\Exception\PayPalApiException; use WooCommerce\PayPalCommerce\WcGateway\Helper\Environment; -use WooCommerce\PayPalCommerce\Onboarding\State; use WooCommerce\PayPalCommerce\Session\SessionHandler; use WooCommerce\PayPalCommerce\Vaulting\WooCommercePaymentTokens; use WooCommerce\PayPalCommerce\WcSubscriptions\FreeTrialHandlerTrait; @@ -104,13 +103,6 @@ class PayPalGateway extends \WC_Payment_Gateway { */ private $refund_processor; - /** - * The state. - * - * @var State - */ - protected $state; - /** * Service able to provide transaction url for an order. * @@ -225,7 +217,7 @@ class PayPalGateway extends \WC_Payment_Gateway { * @param ContainerInterface $config The settings. * @param SessionHandler $session_handler The Session Handler. * @param RefundProcessor $refund_processor The Refund Processor. - * @param State $state The state. + * @param bool $is_connected Whether onboarding was completed. * @param TransactionUrlProvider $transaction_url_provider Service providing transaction view URL based on order. * @param SubscriptionHelper $subscription_helper The subscription helper. * @param string $page_id ID of the current PPCP gateway settings page, or empty if it is not such page. @@ -249,7 +241,7 @@ class PayPalGateway extends \WC_Payment_Gateway { ContainerInterface $config, SessionHandler $session_handler, RefundProcessor $refund_processor, - State $state, + bool $is_connected, TransactionUrlProvider $transaction_url_provider, SubscriptionHelper $subscription_helper, string $page_id, @@ -273,12 +265,11 @@ class PayPalGateway extends \WC_Payment_Gateway { $this->config = $config; $this->session_handler = $session_handler; $this->refund_processor = $refund_processor; - $this->state = $state; $this->transaction_url_provider = $transaction_url_provider; $this->subscription_helper = $subscription_helper; $this->page_id = $page_id; $this->environment = $environment; - $this->onboarded = $state->current_state() === State::STATE_ONBOARDED; + $this->onboarded = $is_connected; $this->payment_token_repository = $payment_token_repository; $this->logger = $logger; $this->api_shop_country = $api_shop_country; From f98c1ec5a769b67df7b63b63d64b799d3824bc7b Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Mon, 17 Feb 2025 17:03:31 +0100 Subject: [PATCH 15/45] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Simplify=20PayPalGat?= =?UTF-8?q?eway=20service?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/ppcp-wc-gateway/services.php | 39 ++++++++++------------------ 1 file changed, 13 insertions(+), 26 deletions(-) diff --git a/modules/ppcp-wc-gateway/services.php b/modules/ppcp-wc-gateway/services.php index c5c8922e8..6a122d7aa 100644 --- a/modules/ppcp-wc-gateway/services.php +++ b/modules/ppcp-wc-gateway/services.php @@ -87,34 +87,21 @@ use WooCommerce\PayPalCommerce\WcGateway\Helper\DCCGatewayConfiguration; return array( 'wcgateway.paypal-gateway' => static function ( ContainerInterface $container ): PayPalGateway { - $order_processor = $container->get( 'wcgateway.order-processor' ); - $settings_renderer = $container->get( 'wcgateway.settings.render' ); - $funding_source_renderer = $container->get( 'wcgateway.funding-source.renderer' ); - $settings = $container->get( 'wcgateway.settings' ); - $session_handler = $container->get( 'session.handler' ); - $refund_processor = $container->get( 'wcgateway.processor.refunds' ); - $transaction_url_provider = $container->get( 'wcgateway.transaction-url-provider' ); - $subscription_helper = $container->get( 'wc-subscriptions.helper' ); - $page_id = $container->get( 'wcgateway.current-ppcp-settings-page-id' ); - $payment_token_repository = $container->get( 'vaulting.repository.payment-token' ); - $environment = $container->get( 'onboarding.environment' ); - $logger = $container->get( 'woocommerce.logger.woocommerce' ); - $api_shop_country = $container->get( 'api.shop.country' ); return new PayPalGateway( - $settings_renderer, - $funding_source_renderer, - $order_processor, - $settings, - $session_handler, - $refund_processor, + $container->get( 'wcgateway.settings.render' ), + $container->get( 'wcgateway.funding-source.renderer' ), + $container->get( 'wcgateway.order-processor' ), + $container->get( 'wcgateway.settings' ), + $container->get( 'session.handler' ), + $container->get( 'wcgateway.processor.refunds' ), $container->get( 'settings.flag.is-connected' ), - $transaction_url_provider, - $subscription_helper, - $page_id, - $environment, - $payment_token_repository, - $logger, - $api_shop_country, + $container->get( 'wcgateway.transaction-url-provider' ), + $container->get( 'wc-subscriptions.helper' ), + $container->get( 'wcgateway.current-ppcp-settings-page-id' ), + $container->get( 'onboarding.environment' ), + $container->get( 'vaulting.repository.payment-token' ), + $container->get( 'woocommerce.logger.woocommerce' ), + $container->get( 'api.shop.country' ), $container->get( 'api.endpoint.order' ), $container->get( 'api.factory.paypal-checkout-url' ), $container->get( 'wcgateway.place-order-button-text' ), From bdd6c23e3c39ada929a44c9a62ed435375103f10 Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Mon, 17 Feb 2025 17:10:02 +0100 Subject: [PATCH 16/45] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Refactor=20ConnectAd?= =?UTF-8?q?minNotice?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/ppcp-wc-gateway/services.php | 9 ++++---- .../src/Notice/ConnectAdminNotice.php | 23 ++++++++++++------- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/modules/ppcp-wc-gateway/services.php b/modules/ppcp-wc-gateway/services.php index 6a122d7aa..940e1c7c7 100644 --- a/modules/ppcp-wc-gateway/services.php +++ b/modules/ppcp-wc-gateway/services.php @@ -328,10 +328,11 @@ return array( } ), 'wcgateway.notice.connect' => static function ( ContainerInterface $container ): ConnectAdminNotice { - $state = $container->get( 'onboarding.state' ); - $settings = $container->get( 'wcgateway.settings' ); - $is_current_country_send_only = $container->get( 'wcgateway.is-send-only-country' ); - return new ConnectAdminNotice( $state, $settings, $is_current_country_send_only ); + return new ConnectAdminNotice( + $container->get( 'settings.flag.is-connected' ), + $container->get( 'wcgateway.settings' ), + $container->get( 'wcgateway.is-send-only-country' ) + ); }, 'wcgateway.notice.currency-unsupported' => static function ( ContainerInterface $container ): UnsupportedCurrencyAdminNotice { $state = $container->get( 'onboarding.state' ); diff --git a/modules/ppcp-wc-gateway/src/Notice/ConnectAdminNotice.php b/modules/ppcp-wc-gateway/src/Notice/ConnectAdminNotice.php index 60085a992..c667277c6 100644 --- a/modules/ppcp-wc-gateway/src/Notice/ConnectAdminNotice.php +++ b/modules/ppcp-wc-gateway/src/Notice/ConnectAdminNotice.php @@ -10,7 +10,6 @@ declare(strict_types=1); namespace WooCommerce\PayPalCommerce\WcGateway\Notice; use WooCommerce\PayPalCommerce\AdminNotices\Entity\Message; -use WooCommerce\PayPalCommerce\Onboarding\State; use WooCommerce\PayPalCommerce\WcGateway\Settings\Settings; use WooCommerce\PayPalCommerce\Vendor\Psr\Container\ContainerInterface; @@ -20,11 +19,11 @@ use WooCommerce\PayPalCommerce\Vendor\Psr\Container\ContainerInterface; class ConnectAdminNotice { /** - * The state. + * Whether the merchant completed the onboarding and is connected to PayPal. * - * @var State + * @var bool */ - private $state; + private bool $is_connected; /** * The settings. @@ -43,12 +42,16 @@ class ConnectAdminNotice { /** * ConnectAdminNotice constructor. * - * @param State $state The state. + * @param bool $is_connected Whether onboarding was completed. * @param ContainerInterface $settings The settings. * @param bool $is_current_country_send_only Whether the current store's country is classified as a send-only country. */ - public function __construct( State $state, ContainerInterface $settings, bool $is_current_country_send_only ) { - $this->state = $state; + public function __construct( + bool $is_connected, + ContainerInterface $settings, + bool $is_current_country_send_only + ) { + $this->is_connected = $is_connected; $this->settings = $settings; $this->is_current_country_send_only = $is_current_country_send_only; } @@ -77,9 +80,13 @@ class ConnectAdminNotice { /** * Whether the message should display. * + * Only display the "almost ready" message for merchants that did not complete + * the onboarding wizard. Also, ensure their store country is eligible for + * collecting PayPal payments. + * * @return bool */ protected function should_display(): bool { - return $this->state->current_state() !== State::STATE_ONBOARDED && $this->is_current_country_send_only === false; + return ! $this->is_connected && ! $this->is_current_country_send_only; } } From cf90b1706c46d16784292f64e380be1a0d0a0f2a Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Mon, 17 Feb 2025 17:12:47 +0100 Subject: [PATCH 17/45] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Refactor=20GatewayWi?= =?UTF-8?q?thoutPayPalAdminNotice?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/ppcp-wc-gateway/services.php | 4 ++-- .../Notice/GatewayWithoutPayPalAdminNotice.php | 15 +++++++-------- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/modules/ppcp-wc-gateway/services.php b/modules/ppcp-wc-gateway/services.php index 940e1c7c7..f6d470a5c 100644 --- a/modules/ppcp-wc-gateway/services.php +++ b/modules/ppcp-wc-gateway/services.php @@ -351,7 +351,7 @@ return array( 'wcgateway.notice.dcc-without-paypal' => static function ( ContainerInterface $container ): GatewayWithoutPayPalAdminNotice { return new GatewayWithoutPayPalAdminNotice( CreditCardGateway::ID, - $container->get( 'onboarding.state' ), + $container->get( 'settings.flag.is-connected' ), $container->get( 'wcgateway.settings' ), $container->get( 'wcgateway.is-wc-payments-page' ), $container->get( 'wcgateway.is-ppcp-settings-page' ) @@ -360,7 +360,7 @@ return array( 'wcgateway.notice.card-button-without-paypal' => static function ( ContainerInterface $container ): GatewayWithoutPayPalAdminNotice { return new GatewayWithoutPayPalAdminNotice( CardButtonGateway::ID, - $container->get( 'onboarding.state' ), + $container->get( 'settings.flag.is-connected' ), $container->get( 'wcgateway.settings' ), $container->get( 'wcgateway.is-wc-payments-page' ), $container->get( 'wcgateway.is-ppcp-settings-page' ), diff --git a/modules/ppcp-wc-gateway/src/Notice/GatewayWithoutPayPalAdminNotice.php b/modules/ppcp-wc-gateway/src/Notice/GatewayWithoutPayPalAdminNotice.php index 2dfc88904..627d23e97 100644 --- a/modules/ppcp-wc-gateway/src/Notice/GatewayWithoutPayPalAdminNotice.php +++ b/modules/ppcp-wc-gateway/src/Notice/GatewayWithoutPayPalAdminNotice.php @@ -11,7 +11,6 @@ namespace WooCommerce\PayPalCommerce\WcGateway\Notice; use WC_Payment_Gateway; use WooCommerce\PayPalCommerce\AdminNotices\Entity\Message; -use WooCommerce\PayPalCommerce\Onboarding\State; use WooCommerce\PayPalCommerce\Vendor\Psr\Container\ContainerInterface; use WooCommerce\PayPalCommerce\WcGateway\Helper\SettingsStatus; @@ -32,11 +31,11 @@ class GatewayWithoutPayPalAdminNotice { private $id; /** - * The state. + * Whether the merchant completed onboarding. * - * @var State + * @var bool */ - private $state; + private bool $is_connected; /** * The settings. @@ -70,7 +69,7 @@ class GatewayWithoutPayPalAdminNotice { * ConnectAdminNotice constructor. * * @param string $id The gateway ID. - * @param State $state The state. + * @param bool $is_connected Whether onboading was completed. * @param ContainerInterface $settings The settings. * @param bool $is_payments_page Whether the current page is the WC payment page. * @param bool $is_ppcp_settings_page Whether the current page is the PPCP settings page. @@ -78,14 +77,14 @@ class GatewayWithoutPayPalAdminNotice { */ public function __construct( string $id, - State $state, + bool $is_connected, ContainerInterface $settings, bool $is_payments_page, bool $is_ppcp_settings_page, ?SettingsStatus $settings_status = null ) { $this->id = $id; - $this->state = $state; + $this->is_connected = $is_connected; $this->settings = $settings; $this->is_payments_page = $is_payments_page; $this->is_ppcp_settings_page = $is_ppcp_settings_page; @@ -161,7 +160,7 @@ class GatewayWithoutPayPalAdminNotice { * @return string One of the NOTICE_* constants. */ protected function check(): string { - if ( State::STATE_ONBOARDED !== $this->state->current_state() || + if ( ! $this->is_connected || ( ! $this->is_payments_page && ! $this->is_ppcp_settings_page ) ) { return self::NOTICE_OK; } From cbe63eb0805ad1caaaea2e4a0a23bfc967e6013a Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Mon, 17 Feb 2025 17:28:14 +0100 Subject: [PATCH 18/45] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Refactor=20Unsupport?= =?UTF-8?q?edCurrencyAdminNotice?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/ppcp-wc-gateway/services.php | 15 +++++---------- .../Notice/UnsupportedCurrencyAdminNotice.php | 17 +++++++---------- 2 files changed, 12 insertions(+), 20 deletions(-) diff --git a/modules/ppcp-wc-gateway/services.php b/modules/ppcp-wc-gateway/services.php index f6d470a5c..c8143a1b6 100644 --- a/modules/ppcp-wc-gateway/services.php +++ b/modules/ppcp-wc-gateway/services.php @@ -335,17 +335,12 @@ return array( ); }, 'wcgateway.notice.currency-unsupported' => static function ( ContainerInterface $container ): UnsupportedCurrencyAdminNotice { - $state = $container->get( 'onboarding.state' ); - $shop_currency = $container->get( 'api.shop.currency.getter' ); - $supported_currencies = $container->get( 'api.supported-currencies' ); - $is_wc_gateways_list_page = $container->get( 'wcgateway.is-wc-gateways-list-page' ); - $is_ppcp_settings_page = $container->get( 'wcgateway.is-ppcp-settings-page' ); return new UnsupportedCurrencyAdminNotice( - $state, - $shop_currency, - $supported_currencies, - $is_wc_gateways_list_page, - $is_ppcp_settings_page + $container->get( 'settings.flag.is-connected' ), + $container->get( 'api.shop.currency.getter' ), + $container->get( 'api.supported-currencies' ), + $container->get( 'wcgateway.is-wc-gateways-list-page' ), + $container->get( 'wcgateway.is-ppcp-settings-page' ) ); }, 'wcgateway.notice.dcc-without-paypal' => static function ( ContainerInterface $container ): GatewayWithoutPayPalAdminNotice { diff --git a/modules/ppcp-wc-gateway/src/Notice/UnsupportedCurrencyAdminNotice.php b/modules/ppcp-wc-gateway/src/Notice/UnsupportedCurrencyAdminNotice.php index dfc9db81c..5b9dae7c4 100644 --- a/modules/ppcp-wc-gateway/src/Notice/UnsupportedCurrencyAdminNotice.php +++ b/modules/ppcp-wc-gateway/src/Notice/UnsupportedCurrencyAdminNotice.php @@ -11,9 +11,6 @@ namespace WooCommerce\PayPalCommerce\WcGateway\Notice; use WooCommerce\PayPalCommerce\AdminNotices\Entity\Message; use WooCommerce\PayPalCommerce\ApiClient\Helper\CurrencyGetter; -use WooCommerce\PayPalCommerce\Onboarding\State; -use WooCommerce\PayPalCommerce\WcGateway\Settings\Settings; -use WooCommerce\PayPalCommerce\Vendor\Psr\Container\ContainerInterface; /** * Class UnsupportedCurrencyAdminNotice @@ -21,11 +18,11 @@ use WooCommerce\PayPalCommerce\Vendor\Psr\Container\ContainerInterface; class UnsupportedCurrencyAdminNotice { /** - * The state. + * Whether the merchant completed onboarding. * - * @var State + * @var bool */ - private $state; + private bool $is_connected; /** * The supported currencies. @@ -58,20 +55,20 @@ class UnsupportedCurrencyAdminNotice { /** * UnsupportedCurrencyAdminNotice constructor. * - * @param State $state The state. + * @param bool $is_connected Whether the merchant completed onboarding. * @param CurrencyGetter $shop_currency The shop currency. * @param array $supported_currencies The supported currencies. * @param bool $is_wc_gateways_list_page Indicates if we're on the WooCommerce gateways list page. * @param bool $is_ppcp_settings_page Indicates if we're on a PPCP Settings page. */ public function __construct( - State $state, + bool $is_connected, CurrencyGetter $shop_currency, array $supported_currencies, bool $is_wc_gateways_list_page, bool $is_ppcp_settings_page ) { - $this->state = $state; + $this->is_connected = $is_connected; $this->shop_currency = $shop_currency; $this->supported_currencies = $supported_currencies; $this->is_wc_gateways_list_page = $is_wc_gateways_list_page; @@ -110,7 +107,7 @@ class UnsupportedCurrencyAdminNotice { * @return bool */ protected function should_display(): bool { - return $this->state->current_state() === State::STATE_ONBOARDED + return $this->is_connected && ! $this->currency_supported() && ( $this->is_wc_gateways_list_page || $this->is_ppcp_settings_page ); } From 672b898eef095c637e719bdd8d1716ce53488a7a Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Mon, 17 Feb 2025 17:37:27 +0100 Subject: [PATCH 19/45] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Refactor=20SectionsR?= =?UTF-8?q?enderer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/ppcp-wc-gateway/services.php | 2 +- .../src/Settings/SectionsRenderer.php | 24 ++++++------------- 2 files changed, 8 insertions(+), 18 deletions(-) diff --git a/modules/ppcp-wc-gateway/services.php b/modules/ppcp-wc-gateway/services.php index c8143a1b6..db160f254 100644 --- a/modules/ppcp-wc-gateway/services.php +++ b/modules/ppcp-wc-gateway/services.php @@ -508,7 +508,7 @@ return array( 'wcgateway.settings.sections-renderer' => static function ( ContainerInterface $container ): SectionsRenderer { return new SectionsRenderer( $container->get( 'wcgateway.current-ppcp-settings-page-id' ), - $container->get( 'onboarding.state' ), + $container->get( 'settings.flag.is-connected' ), $container->get( 'wcgateway.helper.dcc-product-status' ), $container->get( 'api.helpers.dccapplies' ), $container->get( 'button.helper.messages-apply' ), diff --git a/modules/ppcp-wc-gateway/src/Settings/SectionsRenderer.php b/modules/ppcp-wc-gateway/src/Settings/SectionsRenderer.php index f8f05f4ff..5fcf0aeb2 100644 --- a/modules/ppcp-wc-gateway/src/Settings/SectionsRenderer.php +++ b/modules/ppcp-wc-gateway/src/Settings/SectionsRenderer.php @@ -11,7 +11,6 @@ namespace WooCommerce\PayPalCommerce\WcGateway\Settings; use WooCommerce\PayPalCommerce\ApiClient\Helper\DccApplies; use WooCommerce\PayPalCommerce\Button\Helper\MessagesApply; -use WooCommerce\PayPalCommerce\Onboarding\State; use WooCommerce\PayPalCommerce\WcGateway\Gateway\CardButtonGateway; use WooCommerce\PayPalCommerce\WcGateway\Gateway\CreditCardGateway; use WooCommerce\PayPalCommerce\WcGateway\Gateway\OXXO\OXXOGateway; @@ -35,11 +34,11 @@ class SectionsRenderer { protected $page_id; /** - * The onboarding state. + * Whether onboarding was completed and the merchant is connected to PayPal. * - * @var State + * @var bool */ - private $state; + private bool $is_connected; /** * The DCC product status @@ -69,18 +68,11 @@ class SectionsRenderer { */ private $pui_product_status; - /** - * SectionsRenderer constructor. - * - * @param string $page_id ID of the current PPCP gateway settings page, or empty if it is not such page. - * @param State $state The onboarding state. - */ - /** * SectionsRenderer constructor. * * @param string $page_id ID of the current PPCP gateway settings page, or empty if it is not such page. - * @param State $state The onboarding state. + * @param bool $is_connected Whether the merchant completed onboarding. * @param DCCProductStatus $dcc_product_status The DCC product status. * @param DccApplies $dcc_applies The DCC applies. * @param MessagesApply $messages_apply The Messages apply. @@ -88,14 +80,14 @@ class SectionsRenderer { */ public function __construct( string $page_id, - State $state, + bool $is_connected, DCCProductStatus $dcc_product_status, DccApplies $dcc_applies, MessagesApply $messages_apply, PayUponInvoiceProductStatus $pui_product_status ) { $this->page_id = $page_id; - $this->state = $state; + $this->is_connected = $is_connected; $this->dcc_product_status = $dcc_product_status; $this->dcc_applies = $dcc_applies; $this->messages_apply = $messages_apply; @@ -108,9 +100,7 @@ class SectionsRenderer { * @return bool */ public function should_render() : bool { - return ! empty( $this->page_id ) && - ( $this->state->production_state() === State::STATE_ONBOARDED || - $this->state->sandbox_state() === State::STATE_ONBOARDED ); + return $this->page_id && $this->is_connected; } /** From df0e3e861fe8a1f37edf3203fe8f5af386a17713 Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Mon, 17 Feb 2025 17:39:47 +0100 Subject: [PATCH 20/45] =?UTF-8?q?=F0=9F=92=A1=20Comment=20SettingsListener?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/ppcp-wc-gateway/src/Settings/SettingsListener.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/ppcp-wc-gateway/src/Settings/SettingsListener.php b/modules/ppcp-wc-gateway/src/Settings/SettingsListener.php index 6c01830d6..e6b6fa1b9 100644 --- a/modules/ppcp-wc-gateway/src/Settings/SettingsListener.php +++ b/modules/ppcp-wc-gateway/src/Settings/SettingsListener.php @@ -214,6 +214,8 @@ class SettingsListener { Cache $client_credentials_cache ) { + // This is a legacy settings class, it's correctly relying on the `Status` class. + $this->settings = $settings; $this->setting_fields = $setting_fields; $this->webhook_registrar = $webhook_registrar; From 60c044b90566f66e01afde067a9250011433e255 Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Mon, 17 Feb 2025 17:45:25 +0100 Subject: [PATCH 21/45] =?UTF-8?q?=F0=9F=92=A1=20Comment=20SettingsRenderer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/ppcp-wc-gateway/src/Settings/SettingsRenderer.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/ppcp-wc-gateway/src/Settings/SettingsRenderer.php b/modules/ppcp-wc-gateway/src/Settings/SettingsRenderer.php index e32cbf0c4..f9a00170f 100644 --- a/modules/ppcp-wc-gateway/src/Settings/SettingsRenderer.php +++ b/modules/ppcp-wc-gateway/src/Settings/SettingsRenderer.php @@ -114,6 +114,8 @@ class SettingsRenderer { string $api_shop_country ) { + // This is a legacy settings class, it's correctly relying on the `Status` class. + $this->settings = $settings; $this->state = $state; $this->fields = $fields; From 5f2f404cc9b986fc90835b2fa07f2a25ff2b9d3d Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Mon, 17 Feb 2025 17:46:25 +0100 Subject: [PATCH 22/45] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Refactor=20WCGateway?= =?UTF-8?q?Module?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/ppcp-wc-gateway/src/WCGatewayModule.php | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/modules/ppcp-wc-gateway/src/WCGatewayModule.php b/modules/ppcp-wc-gateway/src/WCGatewayModule.php index 6606380b8..a8ab7960b 100644 --- a/modules/ppcp-wc-gateway/src/WCGatewayModule.php +++ b/modules/ppcp-wc-gateway/src/WCGatewayModule.php @@ -607,16 +607,14 @@ class WCGatewayModule implements ServiceModule, ExtendingModule, ExecutableModul $methods[] = $paypal_gateway; - $onboarding_state = $container->get( 'onboarding.state' ); - assert( $onboarding_state instanceof State ); - $settings = $container->get( 'wcgateway.settings' ); assert( $settings instanceof ContainerInterface ); $is_our_page = $container->get( 'wcgateway.is-ppcp-settings-page' ); $is_gateways_list_page = $container->get( 'wcgateway.is-wc-gateways-list-page' ); + $is_connected = $container->get( 'settings.flag.is-connected' ); - if ( $onboarding_state->current_state() !== State::STATE_ONBOARDED ) { + if ( ! $is_connected ) { return $methods; } From 554c9ad03c7fd1b8ab5332689f7250fdbccba22b Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Mon, 17 Feb 2025 17:48:27 +0100 Subject: [PATCH 23/45] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Refactor=20WebhookMo?= =?UTF-8?q?dule?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/ppcp-webhooks/src/WebhookModule.php | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/modules/ppcp-webhooks/src/WebhookModule.php b/modules/ppcp-webhooks/src/WebhookModule.php index f1f7a03b4..1886635f2 100644 --- a/modules/ppcp-webhooks/src/WebhookModule.php +++ b/modules/ppcp-webhooks/src/WebhookModule.php @@ -9,8 +9,6 @@ declare(strict_types=1); namespace WooCommerce\PayPalCommerce\Webhooks; -use WC_Order; -use WooCommerce\PayPalCommerce\Onboarding\State; use Exception; use WooCommerce\PayPalCommerce\Vendor\Inpsyde\Modularity\Module\ExecutableModule; use WooCommerce\PayPalCommerce\Vendor\Inpsyde\Modularity\Module\ExtendingModule; @@ -18,7 +16,6 @@ use WooCommerce\PayPalCommerce\Vendor\Inpsyde\Modularity\Module\FactoryModule; use WooCommerce\PayPalCommerce\Vendor\Inpsyde\Modularity\Module\ModuleClassNameIdTrait; use WooCommerce\PayPalCommerce\Vendor\Inpsyde\Modularity\Module\ServiceModule; use WooCommerce\PayPalCommerce\Vendor\Psr\Container\ContainerInterface; -use Psr\Log\LoggerInterface; use WooCommerce\PayPalCommerce\WcGateway\Settings\Settings; use WooCommerce\PayPalCommerce\Webhooks\Endpoint\ResubscribeEndpoint; use WooCommerce\PayPalCommerce\Webhooks\Endpoint\SimulateEndpoint; @@ -142,9 +139,10 @@ class WebhookModule implements ServiceModule, FactoryModule, ExtendingModule, Ex ); try { - $webhooks = $container->get( 'webhook.status.registered-webhooks' ); - $state = $container->get( 'onboarding.state' ); - if ( empty( $webhooks ) && $state->current_state() >= State::STATE_ONBOARDED ) { + $webhooks = $container->get( 'webhook.status.registered-webhooks' ); + $is_connected = $container->get( 'settings.flag.is-connected' ); + + if ( empty( $webhooks ) && $is_connected ) { $registrar = $container->get( 'webhook.registrar' ); assert( $registrar instanceof WebhookRegistrar ); $registrar->register(); From 8c23462db5a242885aad8a4c91909d85c1ba7032 Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Mon, 17 Feb 2025 17:49:35 +0100 Subject: [PATCH 24/45] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Refactor=20ppcp-webh?= =?UTF-8?q?ooks/factory?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/ppcp-webhooks/factories.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/ppcp-webhooks/factories.php b/modules/ppcp-webhooks/factories.php index 6d36ae4fa..e568b896a 100644 --- a/modules/ppcp-webhooks/factories.php +++ b/modules/ppcp-webhooks/factories.php @@ -10,7 +10,6 @@ declare(strict_types=1); namespace WooCommerce\PayPalCommerce\Webhooks; use WooCommerce\PayPalCommerce\ApiClient\Endpoint\WebhookEndpoint; -use WooCommerce\PayPalCommerce\Onboarding\State; use WooCommerce\PayPalCommerce\Vendor\Psr\Container\ContainerInterface; return array( @@ -18,8 +17,9 @@ return array( $endpoint = $container->get( 'api.endpoint.webhook' ); assert( $endpoint instanceof WebhookEndpoint ); - $state = $container->get( 'onboarding.state' ); - if ( $state->current_state() >= State::STATE_ONBOARDED ) { + $is_connected = $container->get( 'settings.flag.is-connected' ); + + if ( $is_connected ) { return $endpoint->list(); } From 1beda99f83855282d8d3bf39d4974ea5e9c13d3a Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Mon, 17 Feb 2025 17:51:36 +0100 Subject: [PATCH 25/45] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Refactor=20LocalAlte?= =?UTF-8?q?rnativePaymentMethodsModule?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/LocalAlternativePaymentMethodsModule.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/ppcp-local-alternative-payment-methods/src/LocalAlternativePaymentMethodsModule.php b/modules/ppcp-local-alternative-payment-methods/src/LocalAlternativePaymentMethodsModule.php index 1fac77a6e..a65e49317 100644 --- a/modules/ppcp-local-alternative-payment-methods/src/LocalAlternativePaymentMethodsModule.php +++ b/modules/ppcp-local-alternative-payment-methods/src/LocalAlternativePaymentMethodsModule.php @@ -11,7 +11,6 @@ namespace WooCommerce\PayPalCommerce\LocalAlternativePaymentMethods; use WC_Order; use Automattic\WooCommerce\Blocks\Payments\PaymentMethodRegistry; -use WooCommerce\PayPalCommerce\Onboarding\State; use WooCommerce\PayPalCommerce\Vendor\Inpsyde\Modularity\Module\ExecutableModule; use WooCommerce\PayPalCommerce\Vendor\Inpsyde\Modularity\Module\ExtendingModule; use WooCommerce\PayPalCommerce\Vendor\Inpsyde\Modularity\Module\ModuleClassNameIdTrait; @@ -56,8 +55,9 @@ class LocalAlternativePaymentMethodsModule implements ServiceModule, ExtendingMo if ( ! self::should_add_local_apm_gateways( $c ) ) { return $methods; } - $onboarding_state = $c->get( 'onboarding.state' ); - if ( $onboarding_state->current_state() === State::STATE_START ) { + + $is_connected = $c->get( 'settings.flag.is-connected' ); + if ( ! $is_connected ) { return $methods; } From a56707a8ce0fbfb5b9bc01dfbc73fb25af93f296 Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Mon, 17 Feb 2025 17:54:41 +0100 Subject: [PATCH 26/45] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Refactor=20StatusRep?= =?UTF-8?q?ortModule?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/StatusReportModule.php | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/modules/ppcp-status-report/src/StatusReportModule.php b/modules/ppcp-status-report/src/StatusReportModule.php index da015d586..2baa411eb 100644 --- a/modules/ppcp-status-report/src/StatusReportModule.php +++ b/modules/ppcp-status-report/src/StatusReportModule.php @@ -21,7 +21,6 @@ use WooCommerce\PayPalCommerce\ApiClient\Exception\RuntimeException; use WooCommerce\PayPalCommerce\ApiClient\Helper\DccApplies; use WooCommerce\PayPalCommerce\Button\Helper\MessagesApply; use WooCommerce\PayPalCommerce\Compat\PPEC\PPECHelper; -use WooCommerce\PayPalCommerce\Onboarding\State; use WooCommerce\PayPalCommerce\Webhooks\WebhookEventStorage; /** @@ -58,8 +57,8 @@ class StatusReportModule implements ServiceModule, ExtendingModule, ExecutableMo $subscriptions_mode_settings = $c->get( 'wcgateway.settings.fields.subscriptions_mode' ) ?: array(); - /* @var State $state The state. */ - $state = $c->get( 'onboarding.state' ); + /* @var bool $is_connected Whether onboarding is complete. */ + $is_connected = $c->get( 'settings.flag.is-connected' ); /* @var Bearer $bearer The bearer. */ $bearer = $c->get( 'api.bearer' ); @@ -92,7 +91,7 @@ class StatusReportModule implements ServiceModule, ExtendingModule, ExecutableMo 'exported_label' => 'Onboarded', 'description' => esc_html__( 'Whether PayPal account is correctly configured or not.', 'woocommerce-paypal-payments' ), 'value' => $this->bool_to_html( - $this->onboarded( $bearer, $state ) + $this->onboarded( $bearer, $is_connected ) ), ), array( @@ -230,19 +229,18 @@ class StatusReportModule implements ServiceModule, ExtendingModule, ExecutableMo /** * It returns the current onboarding status. * - * @param Bearer $bearer The bearer. - * @param State $state The state. + * @param Bearer $bearer The bearer. + * @param bool $is_connected Whether onboarding is complete. * @return bool */ - private function onboarded( Bearer $bearer, State $state ): bool { + private function onboarded( Bearer $bearer, bool $is_connected ): bool { try { $token = $bearer->bearer(); } catch ( RuntimeException $exception ) { return false; } - $current_state = $state->current_state(); - return $token->is_valid() && $current_state === $state::STATE_ONBOARDED; + return $is_connected && $token->is_valid(); } /** From a59ef8286f0be4a1c2b472649f36f1f94ea49ce5 Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Mon, 17 Feb 2025 17:56:00 +0100 Subject: [PATCH 27/45] =?UTF-8?q?=F0=9F=92=A1=20Comment=20on=20connection-?= =?UTF-8?q?tab-fields?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/Settings/Fields/connection-tab-fields.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/ppcp-wc-gateway/src/Settings/Fields/connection-tab-fields.php b/modules/ppcp-wc-gateway/src/Settings/Fields/connection-tab-fields.php index 409fde543..4a3265b23 100644 --- a/modules/ppcp-wc-gateway/src/Settings/Fields/connection-tab-fields.php +++ b/modules/ppcp-wc-gateway/src/Settings/Fields/connection-tab-fields.php @@ -28,6 +28,8 @@ return function ( ContainerInterface $container, array $fields ): array { return $fields; } + // Legacy settings module, use of `State` class is correct. + $state = $container->get( 'onboarding.state' ); assert( $state instanceof State ); From 90b315cc879d0f2b2012ddc74c96459e1d6eb4b9 Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Mon, 17 Feb 2025 18:02:00 +0100 Subject: [PATCH 28/45] =?UTF-8?q?=F0=9F=8E=A8=20Reorganize=20code=20in=20p?= =?UTF-8?q?pcp-wc-gateway/services?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/ppcp-wc-gateway/services.php | 106 +++++++++------------------ 1 file changed, 35 insertions(+), 71 deletions(-) diff --git a/modules/ppcp-wc-gateway/services.php b/modules/ppcp-wc-gateway/services.php index db160f254..25447be4e 100644 --- a/modules/ppcp-wc-gateway/services.php +++ b/modules/ppcp-wc-gateway/services.php @@ -113,42 +113,27 @@ return array( ); }, 'wcgateway.credit-card-gateway' => static function ( ContainerInterface $container ): CreditCardGateway { - $order_processor = $container->get( 'wcgateway.order-processor' ); - $settings_renderer = $container->get( 'wcgateway.settings.render' ); - $settings = $container->get( 'wcgateway.settings' ); - $dcc_configuration = $container->get( 'wcgateway.configuration.dcc' ); - $module_url = $container->get( 'wcgateway.url' ); - $session_handler = $container->get( 'session.handler' ); - $refund_processor = $container->get( 'wcgateway.processor.refunds' ); - $state = $container->get( 'onboarding.state' ); - $transaction_url_provider = $container->get( 'wcgateway.transaction-url-provider' ); - $subscription_helper = $container->get( 'wc-subscriptions.helper' ); - $payments_endpoint = $container->get( 'api.endpoint.payments' ); - $logger = $container->get( 'woocommerce.logger.woocommerce' ); - $vaulted_credit_card_handler = $container->get( 'vaulting.credit-card-handler' ); - $icons = $container->get( 'wcgateway.credit-card-icons' ); - return new CreditCardGateway( - $settings_renderer, - $order_processor, - $settings, - $dcc_configuration, - $icons, - $module_url, - $session_handler, - $refund_processor, - $state, - $transaction_url_provider, - $subscription_helper, - $payments_endpoint, - $vaulted_credit_card_handler, + $container->get( 'wcgateway.settings.render' ), + $container->get( 'wcgateway.order-processor' ), + $container->get( 'wcgateway.settings' ), + $container->get( 'wcgateway.configuration.dcc' ), + $container->get( 'wcgateway.credit-card-icons' ), + $container->get( 'wcgateway.url' ), + $container->get( 'session.handler' ), + $container->get( 'wcgateway.processor.refunds' ), + $container->get( 'onboarding.state' ), + $container->get( 'wcgateway.transaction-url-provider' ), + $container->get( 'wc-subscriptions.helper' ), + $container->get( 'api.endpoint.payments' ), + $container->get( 'vaulting.credit-card-handler' ), $container->get( 'onboarding.environment' ), $container->get( 'api.endpoint.order' ), $container->get( 'wcgateway.endpoint.capture-card-payment' ), $container->get( 'api.prefix' ), $container->get( 'api.endpoint.payment-tokens' ), $container->get( 'vaulting.wc-payment-tokens' ), - $logger + $container->get( 'woocommerce.logger.woocommerce' ) ); }, 'wcgateway.credit-card-labels' => static function ( ContainerInterface $container ) : array { @@ -526,57 +511,36 @@ return array( return new SettingsStatus( $settings ); }, 'wcgateway.settings.render' => static function ( ContainerInterface $container ): SettingsRenderer { - $settings = $container->get( 'wcgateway.settings' ); - $state = $container->get( 'onboarding.state' ); - $fields = $container->get( 'wcgateway.settings.fields' ); - $dcc_applies = $container->get( 'api.helpers.dccapplies' ); - $messages_apply = $container->get( 'button.helper.messages-apply' ); - $dcc_product_status = $container->get( 'wcgateway.helper.dcc-product-status' ); - $settings_status = $container->get( 'wcgateway.settings.status' ); - $page_id = $container->get( 'wcgateway.current-ppcp-settings-page-id' ); - $api_shop_country = $container->get( 'api.shop.country' ); return new SettingsRenderer( - $settings, - $state, - $fields, - $dcc_applies, - $messages_apply, - $dcc_product_status, - $settings_status, - $page_id, - $api_shop_country + $container->get( 'wcgateway.settings' ), + $container->get( 'onboarding.state' ), + $container->get( 'wcgateway.settings.fields' ), + $container->get( 'api.helpers.dccapplies' ), + $container->get( 'button.helper.messages-apply' ), + $container->get( 'wcgateway.helper.dcc-product-status' ), + $container->get( 'wcgateway.settings.status' ), + $container->get( 'wcgateway.current-ppcp-settings-page-id' ), + $container->get( 'api.shop.country' ) ); }, 'wcgateway.settings.listener' => static function ( ContainerInterface $container ): SettingsListener { - $settings = $container->get( 'wcgateway.settings' ); - $fields = $container->get( 'wcgateway.settings.fields' ); - $webhook_registrar = $container->get( 'webhook.registrar' ); - $state = $container->get( 'onboarding.state' ); - $cache = $container->get( 'api.paypal-bearer-cache' ); - $bearer = $container->get( 'api.bearer' ); - $page_id = $container->get( 'wcgateway.current-ppcp-settings-page-id' ); - $signup_link_cache = $container->get( 'onboarding.signup-link-cache' ); - $signup_link_ids = $container->get( 'onboarding.signup-link-ids' ); - $pui_status_cache = $container->get( 'pui.status-cache' ); - $dcc_status_cache = $container->get( 'dcc.status-cache' ); - $logger = $container->get( 'woocommerce.logger.woocommerce' ); return new SettingsListener( - $settings, - $fields, - $webhook_registrar, - $cache, - $state, - $bearer, - $page_id, - $signup_link_cache, - $signup_link_ids, - $pui_status_cache, - $dcc_status_cache, + $container->get( 'wcgateway.settings' ), + $container->get( 'wcgateway.settings.fields' ), + $container->get( 'webhook.registrar' ), + $container->get( 'api.paypal-bearer-cache' ), + $container->get( 'onboarding.state' ), + $container->get( 'api.bearer' ), + $container->get( 'wcgateway.current-ppcp-settings-page-id' ), + $container->get( 'onboarding.signup-link-cache' ), + $container->get( 'onboarding.signup-link-ids' ), + $container->get( 'pui.status-cache' ), + $container->get( 'dcc.status-cache' ), $container->get( 'http.redirector' ), $container->get( 'api.partner_merchant_id-production' ), $container->get( 'api.partner_merchant_id-sandbox' ), $container->get( 'api.endpoint.billing-agreements' ), - $logger, + $container->get( 'woocommerce.logger.woocommerce' ), new Cache( 'ppcp-client-credentials-cache' ) ); }, From 2e1e8f68a4a251bc6daa0a7e9054991fdc800053 Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Mon, 17 Feb 2025 18:08:18 +0100 Subject: [PATCH 29/45] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Refactor=20SendOnlyC?= =?UTF-8?q?ountryNotice?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/ppcp-wc-gateway/services.php | 4 +--- .../src/Notice/SendOnlyCountryNotice.php | 16 +++++++--------- 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/modules/ppcp-wc-gateway/services.php b/modules/ppcp-wc-gateway/services.php index 25447be4e..36b282129 100644 --- a/modules/ppcp-wc-gateway/services.php +++ b/modules/ppcp-wc-gateway/services.php @@ -443,14 +443,12 @@ return array( return in_array( $store_country, $send_only_countries, true ); }, 'wcgateway.notice.send-only-country' => static function ( ContainerInterface $container ) { - $onboarding_state = $container->get( 'onboarding.state' ); - assert( $onboarding_state instanceof State ); return new SendOnlyCountryNotice( $container->get( 'wcgateway.send-only-message' ), $container->get( 'wcgateway.is-send-only-country' ), $container->get( 'wcgateway.is-ppcp-settings-page' ), $container->get( 'wcgateway.is-wc-gateways-list-page' ), - $onboarding_state->current_state() + $container->get( 'settings.flag.is-connected' ) ); }, diff --git a/modules/ppcp-wc-gateway/src/Notice/SendOnlyCountryNotice.php b/modules/ppcp-wc-gateway/src/Notice/SendOnlyCountryNotice.php index f855e923c..0746c2ac2 100644 --- a/modules/ppcp-wc-gateway/src/Notice/SendOnlyCountryNotice.php +++ b/modules/ppcp-wc-gateway/src/Notice/SendOnlyCountryNotice.php @@ -10,7 +10,6 @@ declare(strict_types=1); namespace WooCommerce\PayPalCommerce\WcGateway\Notice; use WooCommerce\PayPalCommerce\AdminNotices\Entity\Message; -use WooCommerce\PayPalCommerce\Onboarding\State; /** * Creates an admin message that notifies user about send only country. @@ -47,9 +46,9 @@ class SendOnlyCountryNotice { /** * Onboarding state * - * @var int + * @var bool */ - private int $onboarding_state; + private bool $is_connected; /** * AdminNotice constructor. @@ -58,20 +57,20 @@ class SendOnlyCountryNotice { * @param bool $is_send_only_country Determines if current WC country is a send only country. * @param bool $is_ppcp_settings_page Determines if current page is ppcp settings page. * @param bool $is_wc_gateways_list_page Determines if current page is ppcp gateway list page. - * @param int $onboarding_state Determines current onboarding state. + * @param bool $is_connected Whether onboarding was completed. */ public function __construct( string $message_text, bool $is_send_only_country, bool $is_ppcp_settings_page, bool $is_wc_gateways_list_page, - int $onboarding_state + bool $is_connected ) { $this->message_text = $message_text; $this->is_send_only_country = $is_send_only_country; $this->is_ppcp_settings_page = $is_ppcp_settings_page; $this->is_wc_gateways_list_page = $is_wc_gateways_list_page; - $this->onboarding_state = $onboarding_state; + $this->is_connected = $is_connected; } /** @@ -80,10 +79,9 @@ class SendOnlyCountryNotice { * @return Message|null */ public function message(): ?Message { - if ( ! $this->is_send_only_country || - ! $this->is_ppcp_page() || - $this->onboarding_state === State::STATE_START + ! $this->is_connected || + ! $this->is_ppcp_page() ) { return null; } From 55769eea9c9d2757b3ae733c23a313295c9e76cb Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Mon, 17 Feb 2025 18:09:16 +0100 Subject: [PATCH 30/45] =?UTF-8?q?=F0=9F=94=A5=20Remove=20unused=20State=20?= =?UTF-8?q?from=20CreditCardGateway?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/ppcp-wc-gateway/services.php | 1 - .../ppcp-wc-gateway/src/Gateway/CreditCardGateway.php | 11 ----------- 2 files changed, 12 deletions(-) diff --git a/modules/ppcp-wc-gateway/services.php b/modules/ppcp-wc-gateway/services.php index 36b282129..2dc3c3e04 100644 --- a/modules/ppcp-wc-gateway/services.php +++ b/modules/ppcp-wc-gateway/services.php @@ -122,7 +122,6 @@ return array( $container->get( 'wcgateway.url' ), $container->get( 'session.handler' ), $container->get( 'wcgateway.processor.refunds' ), - $container->get( 'onboarding.state' ), $container->get( 'wcgateway.transaction-url-provider' ), $container->get( 'wc-subscriptions.helper' ), $container->get( 'api.endpoint.payments' ), diff --git a/modules/ppcp-wc-gateway/src/Gateway/CreditCardGateway.php b/modules/ppcp-wc-gateway/src/Gateway/CreditCardGateway.php index 2f1e997b5..76e53b0b5 100644 --- a/modules/ppcp-wc-gateway/src/Gateway/CreditCardGateway.php +++ b/modules/ppcp-wc-gateway/src/Gateway/CreditCardGateway.php @@ -19,7 +19,6 @@ use WooCommerce\PayPalCommerce\ApiClient\Endpoint\PaymentTokensEndpoint; use WooCommerce\PayPalCommerce\ApiClient\Exception\PayPalApiException; use WooCommerce\PayPalCommerce\ApiClient\Exception\RuntimeException; use WooCommerce\PayPalCommerce\WcGateway\Helper\Environment; -use WooCommerce\PayPalCommerce\Onboarding\State; use WooCommerce\PayPalCommerce\Session\SessionHandler; use WooCommerce\PayPalCommerce\Vaulting\PaymentTokenRepository; use WooCommerce\PayPalCommerce\Vaulting\VaultedCreditCardHandler; @@ -109,13 +108,6 @@ class CreditCardGateway extends \WC_Payment_Gateway_CC { */ private $refund_processor; - /** - * The state. - * - * @var State - */ - protected $state; - /** * Service to get transaction url for an order. * @@ -204,7 +196,6 @@ class CreditCardGateway extends \WC_Payment_Gateway_CC { * @param string $module_url The URL to the module. * @param SessionHandler $session_handler The Session Handler. * @param RefundProcessor $refund_processor The refund processor. - * @param State $state The state. * @param TransactionUrlProvider $transaction_url_provider Service able to provide view transaction url base. * @param SubscriptionHelper $subscription_helper The subscription helper. * @param PaymentsEndpoint $payments_endpoint The payments endpoint. @@ -226,7 +217,6 @@ class CreditCardGateway extends \WC_Payment_Gateway_CC { string $module_url, SessionHandler $session_handler, RefundProcessor $refund_processor, - State $state, TransactionUrlProvider $transaction_url_provider, SubscriptionHelper $subscription_helper, PaymentsEndpoint $payments_endpoint, @@ -247,7 +237,6 @@ class CreditCardGateway extends \WC_Payment_Gateway_CC { $this->module_url = $module_url; $this->session_handler = $session_handler; $this->refund_processor = $refund_processor; - $this->state = $state; $this->transaction_url_provider = $transaction_url_provider; $this->subscription_helper = $subscription_helper; $this->payments_endpoint = $payments_endpoint; From cd464566d5655d54cfe79b5aa4d83fba08c5bd65 Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Mon, 17 Feb 2025 18:10:11 +0100 Subject: [PATCH 31/45] =?UTF-8?q?=F0=9F=92=A1=20Comment=20State=20use=20in?= =?UTF-8?q?=20ppcp-wc-gateway/services?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/ppcp-wc-gateway/services.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/modules/ppcp-wc-gateway/services.php b/modules/ppcp-wc-gateway/services.php index 2dc3c3e04..c2350b486 100644 --- a/modules/ppcp-wc-gateway/services.php +++ b/modules/ppcp-wc-gateway/services.php @@ -510,7 +510,7 @@ return array( 'wcgateway.settings.render' => static function ( ContainerInterface $container ): SettingsRenderer { return new SettingsRenderer( $container->get( 'wcgateway.settings' ), - $container->get( 'onboarding.state' ), + $container->get( 'onboarding.state' ), // Correct. $container->get( 'wcgateway.settings.fields' ), $container->get( 'api.helpers.dccapplies' ), $container->get( 'button.helper.messages-apply' ), @@ -526,7 +526,7 @@ return array( $container->get( 'wcgateway.settings.fields' ), $container->get( 'webhook.registrar' ), $container->get( 'api.paypal-bearer-cache' ), - $container->get( 'onboarding.state' ), + $container->get( 'onboarding.state' ), // Correct. $container->get( 'api.bearer' ), $container->get( 'wcgateway.current-ppcp-settings-page-id' ), $container->get( 'onboarding.signup-link-cache' ), @@ -670,6 +670,8 @@ return array( return array(); } + // Legacy settings service, correct use of `State` class. + $state = $container->get( 'onboarding.state' ); assert( $state instanceof State ); From 85787eabfdcd441f2aecf79e86ebf2fb57352acb Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Mon, 17 Feb 2025 18:19:19 +0100 Subject: [PATCH 32/45] =?UTF-8?q?=F0=9F=8E=A8=20Add=20type=20hint=20to=20p?= =?UTF-8?q?rivate=20attribute?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/ppcp-wc-gateway/src/Gateway/PayPalGateway.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/ppcp-wc-gateway/src/Gateway/PayPalGateway.php b/modules/ppcp-wc-gateway/src/Gateway/PayPalGateway.php index 02f825a42..9927f155b 100644 --- a/modules/ppcp-wc-gateway/src/Gateway/PayPalGateway.php +++ b/modules/ppcp-wc-gateway/src/Gateway/PayPalGateway.php @@ -129,7 +129,7 @@ class PayPalGateway extends \WC_Payment_Gateway { * * @var bool */ - private $onboarded; + private bool $onboarded; /** * ID of the current PPCP gateway settings page, or empty if it is not such page. From 93820b68f6a5cecc4a0722a13b25ab11d8884be4 Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Mon, 17 Feb 2025 18:20:41 +0100 Subject: [PATCH 33/45] =?UTF-8?q?=E2=9C=85=20Update=20tests=20to=20accept?= =?UTF-8?q?=20refactored=20code?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Gateway/CreditCardGatewayTest.php | 5 --- .../PayUponInvoiceGatewayTest.php | 9 ++--- .../WcGateway/Gateway/WcGatewayTest.php | 36 +++---------------- 3 files changed, 7 insertions(+), 43 deletions(-) diff --git a/tests/PHPUnit/WcGateway/Gateway/CreditCardGatewayTest.php b/tests/PHPUnit/WcGateway/Gateway/CreditCardGatewayTest.php index 72b90e030..7fd20cc2f 100644 --- a/tests/PHPUnit/WcGateway/Gateway/CreditCardGatewayTest.php +++ b/tests/PHPUnit/WcGateway/Gateway/CreditCardGatewayTest.php @@ -10,7 +10,6 @@ use WooCommerce\PayPalCommerce\ApiClient\Endpoint\OrderEndpoint; use WooCommerce\PayPalCommerce\ApiClient\Endpoint\PaymentsEndpoint; use WooCommerce\PayPalCommerce\ApiClient\Endpoint\PaymentTokensEndpoint; use WooCommerce\PayPalCommerce\WcGateway\Helper\Environment; -use WooCommerce\PayPalCommerce\Onboarding\State; use WooCommerce\PayPalCommerce\Session\SessionHandler; use WooCommerce\PayPalCommerce\TestCase; use WooCommerce\PayPalCommerce\Vaulting\VaultedCreditCardHandler; @@ -34,7 +33,6 @@ class CreditCardGatewayTest extends TestCase private $moduleUrl; private $sessionHandler; private $refundProcessor; - private $state; private $transactionUrlProvider; private $subscriptionHelper; private $captureCardPayment; @@ -60,7 +58,6 @@ class CreditCardGatewayTest extends TestCase $this->moduleUrl = ''; $this->sessionHandler = Mockery::mock(SessionHandler::class); $this->refundProcessor = Mockery::mock(RefundProcessor::class); - $this->state = Mockery::mock(State::class); $this->transactionUrlProvider = Mockery::mock(TransactionUrlProvider::class); $this->subscriptionHelper = Mockery::mock(SubscriptionHelper::class); $this->captureCardPayment = Mockery::mock(CaptureCardPayment::class); @@ -73,7 +70,6 @@ class CreditCardGatewayTest extends TestCase $this->environment = Mockery::mock(Environment::class); $this->orderEndpoint = Mockery::mock(OrderEndpoint::class); - $this->state->shouldReceive('current_state')->andReturn(State::STATE_ONBOARDED); $this->config->shouldReceive('has')->andReturn(true); $this->config->shouldReceive('get')->andReturn(''); @@ -92,7 +88,6 @@ class CreditCardGatewayTest extends TestCase $this->moduleUrl, $this->sessionHandler, $this->refundProcessor, - $this->state, $this->transactionUrlProvider, $this->subscriptionHelper, $this->paymentsEndpoint, diff --git a/tests/PHPUnit/WcGateway/Gateway/PayUponInvoice/PayUponInvoiceGatewayTest.php b/tests/PHPUnit/WcGateway/Gateway/PayUponInvoice/PayUponInvoiceGatewayTest.php index d806037ee..ff4f0eaa6 100644 --- a/tests/PHPUnit/WcGateway/Gateway/PayUponInvoice/PayUponInvoiceGatewayTest.php +++ b/tests/PHPUnit/WcGateway/Gateway/PayUponInvoice/PayUponInvoiceGatewayTest.php @@ -11,7 +11,6 @@ use WooCommerce\PayPalCommerce\ApiClient\Entity\Order; use WooCommerce\PayPalCommerce\ApiClient\Entity\PurchaseUnit; use WooCommerce\PayPalCommerce\ApiClient\Factory\PurchaseUnitFactory; use WooCommerce\PayPalCommerce\WcGateway\Helper\Environment; -use WooCommerce\PayPalCommerce\Onboarding\State; use WooCommerce\PayPalCommerce\TestCase; use WooCommerce\PayPalCommerce\WcGateway\Gateway\TransactionUrlProvider; use WooCommerce\PayPalCommerce\WcGateway\Helper\CheckoutHelper; @@ -30,7 +29,7 @@ class PayUponInvoiceGatewayTest extends TestCase private $testee; private $pui_helper; private $checkout_helper; - private $state; + private $is_connected; private $refund_processor; public function setUp(): void @@ -45,9 +44,7 @@ class PayUponInvoiceGatewayTest extends TestCase $this->transaction_url_provider = Mockery::mock(TransactionUrlProvider::class); $this->pui_helper = Mockery::mock(PayUponInvoiceHelper::class); $this->checkout_helper = Mockery::mock(CheckoutHelper::class); - - $this->state = Mockery::mock(State::class); - $this->state->shouldReceive('current_state')->andReturn(State::STATE_ONBOARDED); + $this->is_connected = true; $this->refund_processor = Mockery::mock(RefundProcessor::class); @@ -63,7 +60,7 @@ class PayUponInvoiceGatewayTest extends TestCase $this->logger, $this->pui_helper, $this->checkout_helper, - $this->state, + $this->is_connected, $this->refund_processor, '' ); diff --git a/tests/PHPUnit/WcGateway/Gateway/WcGatewayTest.php b/tests/PHPUnit/WcGateway/Gateway/WcGatewayTest.php index a9e64ebb0..5f5cf722a 100644 --- a/tests/PHPUnit/WcGateway/Gateway/WcGatewayTest.php +++ b/tests/PHPUnit/WcGateway/Gateway/WcGatewayTest.php @@ -10,7 +10,6 @@ use WooCommerce\PayPalCommerce\ApiClient\Endpoint\PaymentTokensEndpoint; use WooCommerce\PayPalCommerce\ApiClient\Entity\Order; use WooCommerce\PayPalCommerce\ApiClient\Entity\OrderStatus; use WooCommerce\PayPalCommerce\WcGateway\Helper\Environment; -use WooCommerce\PayPalCommerce\Onboarding\State; use WooCommerce\PayPalCommerce\Session\SessionHandler; use WooCommerce\PayPalCommerce\Vaulting\WooCommercePaymentTokens; use WooCommerce\PayPalCommerce\WcSubscriptions\Helper\SubscriptionHelper; @@ -38,7 +37,7 @@ class WcGatewayTest extends TestCase private $orderProcessor; private $settings; private $refundProcessor; - private $onboardingState; + private $isConnected; private $transactionUrlProvider; private $subscriptionHelper; private $environment; @@ -63,7 +62,7 @@ class WcGatewayTest extends TestCase $this->settings = Mockery::mock(Settings::class); $this->sessionHandler = Mockery::mock(SessionHandler::class); $this->refundProcessor = Mockery::mock(RefundProcessor::class); - $this->onboardingState = Mockery::mock(State::class); + $this->isConnected = true; $this->transactionUrlProvider = Mockery::mock(TransactionUrlProvider::class); $this->subscriptionHelper = Mockery::mock(SubscriptionHelper::class); $this->environment = Mockery::mock(Environment::class); @@ -76,8 +75,6 @@ class WcGatewayTest extends TestCase $this->apiShopCountry = 'DE'; $this->orderEndpoint = Mockery::mock(OrderEndpoint::class); - $this->onboardingState->shouldReceive('current_state')->andReturn(State::STATE_ONBOARDED); - $this->sessionHandler ->shouldReceive('funding_source') ->andReturnUsing(function () { @@ -108,7 +105,7 @@ class WcGatewayTest extends TestCase $this->settings, $this->sessionHandler, $this->refundProcessor, - $this->onboardingState, + $this->isConnected, $this->transactionUrlProvider, $this->subscriptionHelper, PayPalGateway::ID, @@ -159,7 +156,7 @@ class WcGatewayTest extends TestCase ->andReturn($wcOrder); when('wc_get_checkout_url') - ->justReturn('test'); + ->justReturn('test'); $woocommerce = Mockery::mock(\WooCommerce::class); $cart = Mockery::mock(\WC_Cart::class); @@ -267,23 +264,6 @@ class WcGatewayTest extends TestCase ); } - /** - * @dataProvider dataForTestNeedsSetup - */ - public function testNeedsSetup($currentState, $needSetup) - { - $this->isAdmin = true; - - $this->onboardingState = Mockery::mock(State::class); - $this->onboardingState - ->expects('current_state') - ->andReturn($currentState); - - $testee = $this->createGateway(); - - $this->assertSame($needSetup, $testee->needs_setup()); - } - /** * @dataProvider dataForFundingSource */ @@ -315,14 +295,6 @@ class WcGatewayTest extends TestCase ]; } - public function dataForTestNeedsSetup(): array - { - return [ - [State::STATE_START, true], - [State::STATE_ONBOARDED, false] - ]; - } - public function dataForFundingSource(): array { return [ From d672656513fe90872dc92c0a33f23618e4c04044 Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Mon, 17 Feb 2025 18:26:05 +0100 Subject: [PATCH 34/45] =?UTF-8?q?=F0=9F=94=A5=20Remove=20unused=20?= =?UTF-8?q?=E2=80=9Cuse=E2=80=9D=20statements?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/ppcp-api-client/services.php | 1 - modules/ppcp-axo/extensions.php | 1 - modules/ppcp-button/src/Helper/EarlyOrderHandler.php | 2 -- modules/ppcp-wc-gateway/src/WCGatewayModule.php | 4 ---- modules/ppcp-webhooks/services.php | 2 -- 5 files changed, 10 deletions(-) diff --git a/modules/ppcp-api-client/services.php b/modules/ppcp-api-client/services.php index 272bfdaf7..5b14fc881 100644 --- a/modules/ppcp-api-client/services.php +++ b/modules/ppcp-api-client/services.php @@ -80,7 +80,6 @@ use WooCommerce\PayPalCommerce\ApiClient\Repository\PayeeRepository; use WooCommerce\PayPalCommerce\WcGateway\Settings\Settings; use WooCommerce\PayPalCommerce\ApiClient\Authentication\ConnectBearer; use WooCommerce\PayPalCommerce\WcGateway\Helper\EnvironmentConfig; -use WooCommerce\PayPalCommerce\Onboarding\State; use WooCommerce\PayPalCommerce\WcGateway\Helper\Environment; return array( diff --git a/modules/ppcp-axo/extensions.php b/modules/ppcp-axo/extensions.php index d41829726..a834dcb0d 100644 --- a/modules/ppcp-axo/extensions.php +++ b/modules/ppcp-axo/extensions.php @@ -10,7 +10,6 @@ declare(strict_types=1); namespace WooCommerce\PayPalCommerce\Axo; use WooCommerce\PayPalCommerce\Axo\Helper\NoticeRenderer; -use WooCommerce\PayPalCommerce\Axo\Helper\PropertiesDictionary; use WooCommerce\PayPalCommerce\Onboarding\State; use WooCommerce\PayPalCommerce\Vendor\Psr\Container\ContainerInterface; use WooCommerce\PayPalCommerce\WcGateway\Helper\DisplayManager; diff --git a/modules/ppcp-button/src/Helper/EarlyOrderHandler.php b/modules/ppcp-button/src/Helper/EarlyOrderHandler.php index e3cac3131..393ecab45 100644 --- a/modules/ppcp-button/src/Helper/EarlyOrderHandler.php +++ b/modules/ppcp-button/src/Helper/EarlyOrderHandler.php @@ -11,8 +11,6 @@ namespace WooCommerce\PayPalCommerce\Button\Helper; use WooCommerce\PayPalCommerce\ApiClient\Entity\Order; use WooCommerce\PayPalCommerce\ApiClient\Exception\PayPalApiException; -use WooCommerce\PayPalCommerce\ApiClient\Helper\OrderTransient; -use WooCommerce\PayPalCommerce\Onboarding\State; use WooCommerce\PayPalCommerce\Session\SessionHandler; use WooCommerce\PayPalCommerce\WcGateway\Gateway\PayPalGateway; use WooCommerce\PayPalCommerce\WcGateway\Processor\OrderProcessor; diff --git a/modules/ppcp-wc-gateway/src/WCGatewayModule.php b/modules/ppcp-wc-gateway/src/WCGatewayModule.php index a8ab7960b..10bd258a9 100644 --- a/modules/ppcp-wc-gateway/src/WCGatewayModule.php +++ b/modules/ppcp-wc-gateway/src/WCGatewayModule.php @@ -14,8 +14,6 @@ use Psr\Log\LoggerInterface; use Throwable; use WooCommerce\PayPalCommerce\AdminNotices\Entity\Message; use WooCommerce\PayPalCommerce\ApiClient\Endpoint\BillingAgreementsEndpoint; -use WooCommerce\PayPalCommerce\ApiClient\Endpoint\Orders; -use WooCommerce\PayPalCommerce\ApiClient\Endpoint\PartnersEndpoint; use WooCommerce\PayPalCommerce\ApiClient\Entity\Authorization; use WooCommerce\PayPalCommerce\ApiClient\Exception\RuntimeException; use WooCommerce\PayPalCommerce\ApiClient\Helper\Cache; @@ -33,7 +31,6 @@ use WooCommerce\PayPalCommerce\AdminNotices\Repository\Repository; use WooCommerce\PayPalCommerce\ApiClient\Entity\Capture; use WooCommerce\PayPalCommerce\ApiClient\Entity\OrderStatus; use WooCommerce\PayPalCommerce\ApiClient\Helper\DccApplies; -use WooCommerce\PayPalCommerce\Onboarding\State; use WooCommerce\PayPalCommerce\WcGateway\Admin\FeesRenderer; use WooCommerce\PayPalCommerce\WcGateway\Admin\OrderTablePaymentStatusColumn; use WooCommerce\PayPalCommerce\WcGateway\Admin\PaymentStatusOrderDetail; @@ -59,7 +56,6 @@ use WooCommerce\PayPalCommerce\WcGateway\Settings\SectionsRenderer; use WooCommerce\PayPalCommerce\WcGateway\Settings\Settings; use WooCommerce\PayPalCommerce\WcGateway\Settings\SettingsListener; use WooCommerce\PayPalCommerce\WcGateway\Settings\SettingsRenderer; -use WooCommerce\PayPalCommerce\Vendor\Interop\Container\ServiceProviderInterface; use WooCommerce\PayPalCommerce\Vendor\Psr\Container\ContainerInterface; use WooCommerce\PayPalCommerce\WcGateway\Settings\WcTasks\Registrar\TaskRegistrarInterface; use WooCommerce\PayPalCommerce\WcGateway\Helper\DCCGatewayConfiguration; diff --git a/modules/ppcp-webhooks/services.php b/modules/ppcp-webhooks/services.php index e179fd24a..d6fce34fb 100644 --- a/modules/ppcp-webhooks/services.php +++ b/modules/ppcp-webhooks/services.php @@ -11,10 +11,8 @@ namespace WooCommerce\PayPalCommerce\Webhooks; use Exception; use Psr\Log\LoggerInterface; -use WooCommerce\PayPalCommerce\ApiClient\Endpoint\WebhookEndpoint; use WooCommerce\PayPalCommerce\ApiClient\Entity\Webhook; use WooCommerce\PayPalCommerce\ApiClient\Factory\WebhookFactory; -use WooCommerce\PayPalCommerce\Onboarding\State; use WooCommerce\PayPalCommerce\Webhooks\Endpoint\ResubscribeEndpoint; use WooCommerce\PayPalCommerce\Webhooks\Endpoint\SimulateEndpoint; use WooCommerce\PayPalCommerce\Webhooks\Endpoint\SimulationStateEndpoint; From a59cf7f28534fc978796c9ee6602697394914e9a Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Mon, 17 Feb 2025 18:43:56 +0100 Subject: [PATCH 35/45] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Refactor=20the=20Env?= =?UTF-8?q?ironment=20service?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The goal is to make the Environment instance independent of a Settings-instance, since legacy UI and new UI store settings in different classes and data formats. --- modules/ppcp-onboarding/services.php | 12 +++++-- .../src/Helper/Environment.php | 33 ++++++++++++------- 2 files changed, 31 insertions(+), 14 deletions(-) diff --git a/modules/ppcp-onboarding/services.php b/modules/ppcp-onboarding/services.php index cbbd02da5..773865110 100644 --- a/modules/ppcp-onboarding/services.php +++ b/modules/ppcp-onboarding/services.php @@ -18,6 +18,7 @@ use WooCommerce\PayPalCommerce\Onboarding\Endpoint\UpdateSignupLinksEndpoint; use WooCommerce\PayPalCommerce\Onboarding\Render\OnboardingSendOnlyNoticeRenderer; use WooCommerce\PayPalCommerce\Onboarding\Render\OnboardingRenderer; use WooCommerce\PayPalCommerce\WcGateway\Helper\Environment; +use WooCommerce\PayPalCommerce\WcGateway\Settings\Settings; return array( 'api.paypal-host' => function( ContainerInterface $container ) : string { @@ -56,9 +57,16 @@ return array( return $state->current_state() >= State::STATE_ONBOARDED; }, - 'onboarding.environment' => function( ContainerInterface $container ) : Environment { + 'settings.flag.is-sandbox' => static function ( ContainerInterface $container ) : bool { $settings = $container->get( 'wcgateway.settings' ); - return new Environment( $settings ); + assert( $settings instanceof Settings ); + + return $settings->has( 'sandbox_on' ) && $settings->get( 'sandbox_on' ); + }, + 'onboarding.environment' => function ( ContainerInterface $container ) : Environment { + return new Environment( + $container->get( 'settings.flag.is-sandbox' ) + ); }, 'onboarding.assets' => function( ContainerInterface $container ) : OnboardingAssets { diff --git a/modules/ppcp-wc-gateway/src/Helper/Environment.php b/modules/ppcp-wc-gateway/src/Helper/Environment.php index 143ebd843..141e329f5 100644 --- a/modules/ppcp-wc-gateway/src/Helper/Environment.php +++ b/modules/ppcp-wc-gateway/src/Helper/Environment.php @@ -9,8 +9,6 @@ declare( strict_types = 1 ); namespace WooCommerce\PayPalCommerce\WcGateway\Helper; -use WooCommerce\PayPalCommerce\Vendor\Psr\Container\ContainerInterface; - /** * Class Environment */ @@ -27,30 +25,41 @@ class Environment { public const SANDBOX = 'sandbox'; /** - * The Settings. + * Name of the current environment. * - * @var ContainerInterface + * @var string */ - private ContainerInterface $settings; + private string $environment_name = ''; /** * Environment constructor. * - * @param ContainerInterface $settings The settings. + * @param bool $is_sandbox Whether this instance represents a sandbox environment. */ - public function __construct( ContainerInterface $settings ) { - $this->settings = $settings; + public function __construct( bool $is_sandbox = false ) { + $this->set_environment( $is_sandbox ); } /** - * Returns the current environment. + * Sets the current environment. + * + * @param bool $is_sandbox Whether this instance represents a sandbox environment. + */ + private function set_environment( bool $is_sandbox ) : void { + if ( $is_sandbox ) { + $this->environment_name = self::SANDBOX; + } else { + $this->environment_name = self::PRODUCTION; + } + } + + /** + * Returns the current environment's name. * * @return string */ public function current_environment() : string { - return ( - $this->settings->has( 'sandbox_on' ) && $this->settings->get( 'sandbox_on' ) - ) ? self::SANDBOX : self::PRODUCTION; + return $this->environment_name; } /** From 7a106742e3bcaa5fd278b1ba23e5c5d9ef75c199 Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Mon, 17 Feb 2025 18:48:38 +0100 Subject: [PATCH 36/45] =?UTF-8?q?=F0=9F=9A=9A=20Rename=20environment-servi?= =?UTF-8?q?ce?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/ppcp-api-client/services.php | 2 +- modules/ppcp-applepay/extensions.php | 2 +- modules/ppcp-applepay/services.php | 2 +- modules/ppcp-applepay/src/ApplepayModule.php | 2 +- modules/ppcp-axo-block/services.php | 2 +- modules/ppcp-axo/services.php | 4 ++-- modules/ppcp-button/services.php | 4 ++-- modules/ppcp-googlepay/services.php | 4 ++-- modules/ppcp-onboarding/services.php | 8 ++++---- .../src/OnboardingRESTController.php | 2 +- .../src/PayPalSubscriptionsModule.php | 6 +++--- modules/ppcp-vaulting/services.php | 2 +- modules/ppcp-wc-gateway/extensions.php | 2 +- modules/ppcp-wc-gateway/services.php | 20 +++++++++---------- .../ppcp-wc-gateway/src/WCGatewayModule.php | 2 +- modules/ppcp-wc-subscriptions/services.php | 2 +- modules/ppcp-webhooks/services.php | 2 +- 17 files changed, 34 insertions(+), 34 deletions(-) diff --git a/modules/ppcp-api-client/services.php b/modules/ppcp-api-client/services.php index 5b14fc881..7fb75327b 100644 --- a/modules/ppcp-api-client/services.php +++ b/modules/ppcp-api-client/services.php @@ -84,7 +84,7 @@ use WooCommerce\PayPalCommerce\WcGateway\Helper\Environment; return array( 'api.host' => static function( ContainerInterface $container ) : string { - $environment = $container->get( 'onboarding.environment' ); + $environment = $container->get( 'settings.environment' ); assert( $environment instanceof Environment ); if ( $environment->is_sandbox() ) { diff --git a/modules/ppcp-applepay/extensions.php b/modules/ppcp-applepay/extensions.php index 53068c506..6fcbc12f4 100644 --- a/modules/ppcp-applepay/extensions.php +++ b/modules/ppcp-applepay/extensions.php @@ -42,7 +42,7 @@ return array( assert( $display_manager instanceof DisplayManager ); // Domain registration. - $env = $container->get( 'onboarding.environment' ); + $env = $container->get( 'settings.environment' ); assert( $env instanceof Environment ); $domain_registration_url = 'https://www.paypal.com/uccservicing/apm/applepay'; diff --git a/modules/ppcp-applepay/services.php b/modules/ppcp-applepay/services.php index 1d4e10c78..1bf5dd311 100644 --- a/modules/ppcp-applepay/services.php +++ b/modules/ppcp-applepay/services.php @@ -267,7 +267,7 @@ return array( $product_status = $container->get( 'applepay.apple-product-status' ); assert( $product_status instanceof AppleProductStatus ); - $environment = $container->get( 'onboarding.environment' ); + $environment = $container->get( 'settings.environment' ); assert( $environment instanceof Environment ); $enabled = $product_status->is_active(); diff --git a/modules/ppcp-applepay/src/ApplepayModule.php b/modules/ppcp-applepay/src/ApplepayModule.php index 8015e0a4d..df0d06adf 100644 --- a/modules/ppcp-applepay/src/ApplepayModule.php +++ b/modules/ppcp-applepay/src/ApplepayModule.php @@ -368,7 +368,7 @@ class ApplepayModule implements ServiceModule, ExtendingModule, ExecutableModule if ( ! $button->is_enabled() ) { return; } - $env = $c->get( 'onboarding.environment' ); + $env = $c->get( 'settings.environment' ); assert( $env instanceof Environment ); $is_sandobx = $env->current_environment_is( Environment::SANDBOX ); $this->load_domain_association_file( $is_sandobx ); diff --git a/modules/ppcp-axo-block/services.php b/modules/ppcp-axo-block/services.php index 6945215ba..b93513148 100644 --- a/modules/ppcp-axo-block/services.php +++ b/modules/ppcp-axo-block/services.php @@ -36,7 +36,7 @@ return array( fn(): SmartButtonInterface => $container->get( 'button.smart-button' ), $container->get( 'wcgateway.settings' ), $container->get( 'wcgateway.configuration.dcc' ), - $container->get( 'onboarding.environment' ), + $container->get( 'settings.environment' ), $container->get( 'wcgateway.url' ), $container->get( 'axo.payment_method_selected_map' ), $container->get( 'axo.supported-country-card-type-matrix' ) diff --git a/modules/ppcp-axo/services.php b/modules/ppcp-axo/services.php index ca427700d..294558be9 100644 --- a/modules/ppcp-axo/services.php +++ b/modules/ppcp-axo/services.php @@ -66,7 +66,7 @@ return array( $container->get( 'ppcp.asset-version' ), $container->get( 'session.handler' ), $container->get( 'wcgateway.settings' ), - $container->get( 'onboarding.environment' ), + $container->get( 'settings.environment' ), $container->get( 'axo.insights' ), $container->get( 'wcgateway.settings.status' ), $container->get( 'api.shop.currency.getter' ), @@ -89,7 +89,7 @@ return array( $container->get( 'api.factory.purchase-unit' ), $container->get( 'api.factory.shipping-preference' ), $container->get( 'wcgateway.transaction-url-provider' ), - $container->get( 'onboarding.environment' ), + $container->get( 'settings.environment' ), $container->get( 'woocommerce.logger.woocommerce' ) ); }, diff --git a/modules/ppcp-button/services.php b/modules/ppcp-button/services.php index da4156216..44e9a52ac 100644 --- a/modules/ppcp-button/services.php +++ b/modules/ppcp-button/services.php @@ -48,7 +48,7 @@ return array( return $client_id; } - $env = $container->get( 'onboarding.environment' ); + $env = $container->get( 'settings.environment' ); /** * The environment. * @@ -141,7 +141,7 @@ return array( $dcc_applies = $container->get( 'api.helpers.dccapplies' ); $subscription_helper = $container->get( 'wc-subscriptions.helper' ); $messages_apply = $container->get( 'button.helper.messages-apply' ); - $environment = $container->get( 'onboarding.environment' ); + $environment = $container->get( 'settings.environment' ); $payment_token_repository = $container->get( 'vaulting.repository.payment-token' ); return new SmartButton( $container->get( 'button.url' ), diff --git a/modules/ppcp-googlepay/services.php b/modules/ppcp-googlepay/services.php index 045ececa8..b26e4dfe9 100644 --- a/modules/ppcp-googlepay/services.php +++ b/modules/ppcp-googlepay/services.php @@ -173,7 +173,7 @@ return array( $container->get( 'session.handler' ), $container->get( 'wc-subscriptions.helper' ), $container->get( 'wcgateway.settings' ), - $container->get( 'onboarding.environment' ), + $container->get( 'settings.environment' ), $container->get( 'wcgateway.settings.status' ), $container->get( 'woocommerce.logger.woocommerce' ) ); @@ -228,7 +228,7 @@ return array( $product_status = $container->get( 'googlepay.helpers.apm-product-status' ); assert( $product_status instanceof ApmProductStatus ); - $environment = $container->get( 'onboarding.environment' ); + $environment = $container->get( 'settings.environment' ); assert( $environment instanceof Environment ); $enabled = $product_status->is_active(); diff --git a/modules/ppcp-onboarding/services.php b/modules/ppcp-onboarding/services.php index 773865110..64d136092 100644 --- a/modules/ppcp-onboarding/services.php +++ b/modules/ppcp-onboarding/services.php @@ -22,7 +22,7 @@ use WooCommerce\PayPalCommerce\WcGateway\Settings\Settings; return array( 'api.paypal-host' => function( ContainerInterface $container ) : string { - $environment = $container->get( 'onboarding.environment' ); + $environment = $container->get( 'settings.environment' ); /** * The current environment. * @@ -35,7 +35,7 @@ return array( }, 'api.paypal-website-url' => function( ContainerInterface $container ) : string { - $environment = $container->get( 'onboarding.environment' ); + $environment = $container->get( 'settings.environment' ); assert( $environment instanceof Environment ); if ( $environment->current_environment_is( Environment::SANDBOX ) ) { return $container->get( 'api.paypal-website-url-sandbox' ); @@ -63,7 +63,7 @@ return array( return $settings->has( 'sandbox_on' ) && $settings->get( 'sandbox_on' ); }, - 'onboarding.environment' => function ( ContainerInterface $container ) : Environment { + 'settings.environment' => function ( ContainerInterface $container ) : Environment { return new Environment( $container->get( 'settings.flag.is-sandbox' ) ); @@ -76,7 +76,7 @@ return array( $container->get( 'onboarding.url' ), $container->get( 'ppcp.asset-version' ), $state, - $container->get( 'onboarding.environment' ), + $container->get( 'settings.environment' ), $login_seller_endpoint, $container->get( 'wcgateway.current-ppcp-settings-page-id' ) ); diff --git a/modules/ppcp-onboarding/src/OnboardingRESTController.php b/modules/ppcp-onboarding/src/OnboardingRESTController.php index 863bed599..95d47b8f8 100644 --- a/modules/ppcp-onboarding/src/OnboardingRESTController.php +++ b/modules/ppcp-onboarding/src/OnboardingRESTController.php @@ -133,7 +133,7 @@ class OnboardingRESTController { * @return array */ public function get_status( $request ) { - $environment = $this->container->get( 'onboarding.environment' ); + $environment = $this->container->get( 'settings.environment' ); $state = $this->container->get( 'onboarding.state' ); // Legacy onboarding module; using `State::STATE_ONBOARDED` checks is valid here. diff --git a/modules/ppcp-paypal-subscriptions/src/PayPalSubscriptionsModule.php b/modules/ppcp-paypal-subscriptions/src/PayPalSubscriptionsModule.php index 5008ac67c..768668a77 100644 --- a/modules/ppcp-paypal-subscriptions/src/PayPalSubscriptionsModule.php +++ b/modules/ppcp-paypal-subscriptions/src/PayPalSubscriptionsModule.php @@ -365,7 +365,7 @@ class PayPalSubscriptionsModule implements ServiceModule, ExtendingModule, Execu function( $subscription ) use ( $c ) { $subscription_id = $subscription->get_meta( 'ppcp_subscription' ) ?? ''; if ( $subscription_id ) { - $environment = $c->get( 'onboarding.environment' ); + $environment = $c->get( 'settings.environment' ); $host = $environment->current_environment_is( Environment::SANDBOX ) ? 'https://www.sandbox.paypal.com' : 'https://www.paypal.com'; ?> @@ -476,7 +476,7 @@ class PayPalSubscriptionsModule implements ServiceModule, ExtendingModule, Execu return; } - $environment = $c->get( 'onboarding.environment' ); + $environment = $c->get( 'settings.environment' ); echo ''; @@ -507,7 +507,7 @@ class PayPalSubscriptionsModule implements ServiceModule, ExtendingModule, Execu return; } - $environment = $c->get( 'onboarding.environment' ); + $environment = $c->get( 'settings.environment' ); $this->render_paypal_subscription_fields( $product, $environment ); } diff --git a/modules/ppcp-vaulting/services.php b/modules/ppcp-vaulting/services.php index 45355225d..da0d1d209 100644 --- a/modules/ppcp-vaulting/services.php +++ b/modules/ppcp-vaulting/services.php @@ -37,7 +37,7 @@ return array( $container->get( 'api.factory.payer' ), $container->get( 'api.factory.shipping-preference' ), $container->get( 'api.endpoint.order' ), - $container->get( 'onboarding.environment' ), + $container->get( 'settings.environment' ), $container->get( 'wcgateway.processor.authorized-payments' ), $container->get( 'wcgateway.settings' ) ); diff --git a/modules/ppcp-wc-gateway/extensions.php b/modules/ppcp-wc-gateway/extensions.php index 77fea0abd..ef6c85c77 100644 --- a/modules/ppcp-wc-gateway/extensions.php +++ b/modules/ppcp-wc-gateway/extensions.php @@ -26,7 +26,7 @@ return array( return $settings->has( 'merchant_id' ) ? (string) $settings->get( 'merchant_id' ) : ''; }, 'api.partner_merchant_id' => static function ( string $previous, ContainerInterface $container ): string { - $environment = $container->get( 'onboarding.environment' ); + $environment = $container->get( 'settings.environment' ); /** * The environment. diff --git a/modules/ppcp-wc-gateway/services.php b/modules/ppcp-wc-gateway/services.php index c2350b486..920be9f0a 100644 --- a/modules/ppcp-wc-gateway/services.php +++ b/modules/ppcp-wc-gateway/services.php @@ -98,7 +98,7 @@ return array( $container->get( 'wcgateway.transaction-url-provider' ), $container->get( 'wc-subscriptions.helper' ), $container->get( 'wcgateway.current-ppcp-settings-page-id' ), - $container->get( 'onboarding.environment' ), + $container->get( 'settings.environment' ), $container->get( 'vaulting.repository.payment-token' ), $container->get( 'woocommerce.logger.woocommerce' ), $container->get( 'api.shop.country' ), @@ -126,7 +126,7 @@ return array( $container->get( 'wc-subscriptions.helper' ), $container->get( 'api.endpoint.payments' ), $container->get( 'vaulting.credit-card-handler' ), - $container->get( 'onboarding.environment' ), + $container->get( 'settings.environment' ), $container->get( 'api.endpoint.order' ), $container->get( 'wcgateway.endpoint.capture-card-payment' ), $container->get( 'api.prefix' ), @@ -208,7 +208,7 @@ return array( $container->get( 'wcgateway.transaction-url-provider' ), $container->get( 'wc-subscriptions.helper' ), $container->get( 'wcgateway.settings.allow_card_button_gateway.default' ), - $container->get( 'onboarding.environment' ), + $container->get( 'settings.environment' ), $container->get( 'vaulting.repository.payment-token' ), $container->get( 'woocommerce.logger.woocommerce' ), $container->get( 'api.factory.paypal-checkout-url' ), @@ -549,7 +549,7 @@ return array( $threed_secure = $container->get( 'button.helper.three-d-secure' ); $authorized_payments_processor = $container->get( 'wcgateway.processor.authorized-payments' ); $settings = $container->get( 'wcgateway.settings' ); - $environment = $container->get( 'onboarding.environment' ); + $environment = $container->get( 'settings.environment' ); $logger = $container->get( 'woocommerce.logger.woocommerce' ); $subscription_helper = $container->get( 'wc-subscriptions.helper' ); $order_helper = $container->get( 'api.order-helper' ); @@ -1429,7 +1429,7 @@ return array( $container->get( 'wcgateway.pay-upon-invoice-order-endpoint' ), $container->get( 'api.factory.purchase-unit' ), $container->get( 'wcgateway.pay-upon-invoice-payment-source-factory' ), - $container->get( 'onboarding.environment' ), + $container->get( 'settings.environment' ), $container->get( 'wcgateway.transaction-url-provider' ), $container->get( 'woocommerce.logger.woocommerce' ), $container->get( 'wcgateway.pay-upon-invoice-helper' ), @@ -1493,7 +1493,7 @@ return array( $container->get( 'api.factory.shipping-preference' ), $container->get( 'wcgateway.url' ), $container->get( 'wcgateway.transaction-url-provider' ), - $container->get( 'onboarding.environment' ), + $container->get( 'settings.environment' ), $container->get( 'woocommerce.logger.woocommerce' ) ); }, @@ -1669,7 +1669,7 @@ return array( $dcc_product_status = $container->get( 'wcgateway.helper.dcc-product-status' ); assert( $dcc_product_status instanceof DCCProductStatus ); - $environment = $container->get( 'onboarding.environment' ); + $environment = $container->get( 'settings.environment' ); assert( $environment instanceof Environment ); $dcc_enabled = $dcc_product_status->is_active(); @@ -1699,7 +1699,7 @@ return array( ); }, 'wcgateway.settings.connection.reference-transactions-status-text' => static function ( ContainerInterface $container ): string { - $environment = $container->get( 'onboarding.environment' ); + $environment = $container->get( 'settings.environment' ); assert( $environment instanceof Environment ); $billing_agreements_endpoint = $container->get( 'api.endpoint.billing-agreements' ); @@ -1740,7 +1740,7 @@ return array( $pui_product_status = $container->get( 'wcgateway.pay-upon-invoice-product-status' ); assert( $pui_product_status instanceof PayUponInvoiceProductStatus ); - $environment = $container->get( 'onboarding.environment' ); + $environment = $container->get( 'settings.environment' ); assert( $environment instanceof Environment ); $pui_enabled = $pui_product_status->is_active(); @@ -1861,7 +1861,7 @@ return array( $container->get( 'wcgateway.url' ), $container->get( 'ppcp.asset-version' ), $container->get( 'wcgateway.fraudnet' ), - $container->get( 'onboarding.environment' ), + $container->get( 'settings.environment' ), $container->get( 'wcgateway.settings' ), $container->get( 'wcgateway.gateway-repository' ), $container->get( 'session.handler' ), diff --git a/modules/ppcp-wc-gateway/src/WCGatewayModule.php b/modules/ppcp-wc-gateway/src/WCGatewayModule.php index 10bd258a9..2f82c5636 100644 --- a/modules/ppcp-wc-gateway/src/WCGatewayModule.php +++ b/modules/ppcp-wc-gateway/src/WCGatewayModule.php @@ -205,7 +205,7 @@ class WCGatewayModule implements ServiceModule, ExtendingModule, ExecutableModul $c->get( 'button.client_id_for_admin' ), $c->get( 'api.shop.currency.getter' ), $c->get( 'api.shop.country' ), - $c->get( 'onboarding.environment' ), + $c->get( 'settings.environment' ), $settings_status->is_pay_later_button_enabled(), $settings->has( 'disable_funding' ) ? $settings->get( 'disable_funding' ) : array(), $c->get( 'wcgateway.settings.funding-sources' ), diff --git a/modules/ppcp-wc-subscriptions/services.php b/modules/ppcp-wc-subscriptions/services.php index dc23fca9f..165f673b9 100644 --- a/modules/ppcp-wc-subscriptions/services.php +++ b/modules/ppcp-wc-subscriptions/services.php @@ -28,7 +28,7 @@ return array( $endpoint = $container->get( 'api.endpoint.order' ); $purchase_unit_factory = $container->get( 'api.factory.purchase-unit' ); $payer_factory = $container->get( 'api.factory.payer' ); - $environment = $container->get( 'onboarding.environment' ); + $environment = $container->get( 'settings.environment' ); $settings = $container->get( 'wcgateway.settings' ); $authorized_payments_processor = $container->get( 'wcgateway.processor.authorized-payments' ); $funding_source_renderer = $container->get( 'wcgateway.funding-source.renderer' ); diff --git a/modules/ppcp-webhooks/services.php b/modules/ppcp-webhooks/services.php index d6fce34fb..e000a1690 100644 --- a/modules/ppcp-webhooks/services.php +++ b/modules/ppcp-webhooks/services.php @@ -181,7 +181,7 @@ return array( return new WebhooksStatusPageAssets( $container->get( 'webhook.module-url' ), $container->get( 'ppcp.asset-version' ), - $container->get( 'onboarding.environment' ) + $container->get( 'settings.environment' ) ); }, From a532f6041651b42f641c5f75cb72c52f88350b30 Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Mon, 17 Feb 2025 18:50:50 +0100 Subject: [PATCH 37/45] =?UTF-8?q?=E2=9C=A8=20Add=20environment=20service?= =?UTF-8?q?=20to=20new=20settings=20module?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/ppcp-settings/services.php | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/modules/ppcp-settings/services.php b/modules/ppcp-settings/services.php index 9bb48f438..4ff09c639 100644 --- a/modules/ppcp-settings/services.php +++ b/modules/ppcp-settings/services.php @@ -20,13 +20,11 @@ use WooCommerce\PayPalCommerce\Settings\Data\TodosModel; use WooCommerce\PayPalCommerce\Settings\Data\Definition\TodosDefinition; use WooCommerce\PayPalCommerce\Settings\Endpoint\AuthenticationRestEndpoint; use WooCommerce\PayPalCommerce\Settings\Endpoint\CommonRestEndpoint; -use WooCommerce\PayPalCommerce\Settings\Endpoint\CompleteOnClickEndpoint; use WooCommerce\PayPalCommerce\Settings\Endpoint\LoginLinkRestEndpoint; use WooCommerce\PayPalCommerce\Settings\Endpoint\OnboardingRestEndpoint; use WooCommerce\PayPalCommerce\Settings\Endpoint\PayLaterMessagingEndpoint; use WooCommerce\PayPalCommerce\Settings\Endpoint\PaymentRestEndpoint; use WooCommerce\PayPalCommerce\Settings\Endpoint\RefreshFeatureStatusEndpoint; -use WooCommerce\PayPalCommerce\Settings\Endpoint\ResetDismissedTodosEndpoint; use WooCommerce\PayPalCommerce\Settings\Endpoint\WebhookSettingsEndpoint; use WooCommerce\PayPalCommerce\Settings\Endpoint\SettingsRestEndpoint; use WooCommerce\PayPalCommerce\Settings\Endpoint\StylingRestEndpoint; @@ -43,6 +41,7 @@ use WooCommerce\PayPalCommerce\Settings\Data\Definition\PaymentMethodsDefinition use WooCommerce\PayPalCommerce\PayLaterConfigurator\Factory\ConfigFactory; use WooCommerce\PayPalCommerce\WcGateway\Settings\Settings; use WooCommerce\PayPalCommerce\PayLaterConfigurator\Endpoint\SaveConfig; +use WooCommerce\PayPalCommerce\WcGateway\Helper\Environment; return array( 'settings.url' => static function ( ContainerInterface $container ) : string { @@ -124,6 +123,17 @@ return array( return $data->is_merchant_connected(); }, + 'settings.flag.is-sandbox' => static function ( ContainerInterface $container ) : bool { + $data = $container->get( 'settings.data.general' ); + assert( $data instanceof GeneralSettings ); + + return $data->is_sandbox_merchant(); + }, + 'settings.environment' => static function ( ContainerInterface $container ) : Environment { + return new Environment( + $container->get( 'settings.flag.is-sandbox' ) + ); + }, 'settings.rest.onboarding' => static function ( ContainerInterface $container ) : OnboardingRestEndpoint { return new OnboardingRestEndpoint( $container->get( 'settings.data.onboarding' ) ); }, From ea471f98fc0888cb7df3f1d8e5cb4ccba29fcbed Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Mon, 17 Feb 2025 18:51:20 +0100 Subject: [PATCH 38/45] =?UTF-8?q?=E2=9C=85=20Adapt=20unit=20tests=20to=20r?= =?UTF-8?q?ecent=20changes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/PHPUnit/WcGateway/Processor/OrderProcessorTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/PHPUnit/WcGateway/Processor/OrderProcessorTest.php b/tests/PHPUnit/WcGateway/Processor/OrderProcessorTest.php index 951c3d9af..d7b8c2ed0 100644 --- a/tests/PHPUnit/WcGateway/Processor/OrderProcessorTest.php +++ b/tests/PHPUnit/WcGateway/Processor/OrderProcessorTest.php @@ -37,7 +37,7 @@ class OrderProcessorTest extends TestCase public function setUp(): void { parent::setUp(); - $this->environment = new Environment(new ReadOnlyContainer([], [], [], [])); + $this->environment = new Environment( false ); } public function testAuthorize() { From 745a1031bc54c622bd72e8c4b293148ac513da11 Mon Sep 17 00:00:00 2001 From: Daniel Dudzic Date: Mon, 17 Feb 2025 21:04:16 +0100 Subject: [PATCH 39/45] Todos: Update the eligibility conditions for the Subscription todo --- modules/ppcp-settings/services.php | 23 ++++++++-------- .../src/Data/Definition/TodosDefinition.php | 24 +++++++++++++---- .../src/Service/TodosEligibilityService.php | 10 ------- .../src/Helper/SubscriptionHelper.php | 27 +++++++++++++++++++ 4 files changed, 58 insertions(+), 26 deletions(-) diff --git a/modules/ppcp-settings/services.php b/modules/ppcp-settings/services.php index 9bb48f438..a91c1f9d4 100644 --- a/modules/ppcp-settings/services.php +++ b/modules/ppcp-settings/services.php @@ -307,7 +307,8 @@ return array( 'settings.data.definition.todos' => static function ( ContainerInterface $container ) : TodosDefinition { return new TodosDefinition( $container->get( 'settings.service.todos_eligibilities' ), - $container->get( 'settings.data.general' ) + $container->get( 'settings.data.general' ), + $container->get( 'wc-subscriptions.helper' ) ); }, 'settings.data.definition.methods' => static function ( ContainerInterface $container ) : PaymentMethodsDefinition { @@ -360,18 +361,18 @@ return array( $capabilities['acdc'] && ! $gateways['axo'], // Enable Fastlane. $capabilities['acdc'] && ! $gateways['card-button'], // Enable Credit and Debit Cards on your checkout. $is_pay_later_messaging_enabled_for_any_location, // Enable Pay Later messaging. - ! $is_pay_later_messaging_enabled_for_any_location && ! $pay_later_statuses['product'], // Add Pay Later messaging (Product page). - ! $is_pay_later_messaging_enabled_for_any_location && ! $pay_later_statuses['cart'], // Add Pay Later messaging (Cart). + ! $is_pay_later_messaging_enabled_for_any_location && ! $pay_later_statuses['product'], // Add Pay Later messaging (Product page). + ! $is_pay_later_messaging_enabled_for_any_location && ! $pay_later_statuses['cart'], // Add Pay Later messaging (Cart). ! $is_pay_later_messaging_enabled_for_any_location && ! $pay_later_statuses['checkout'], // Add Pay Later messaging (Checkout). - true, // Configure a PayPal Subscription. - true, // Add PayPal buttons. - true, // Register Domain for Apple Pay. - $capabilities['acdc'] && ! ( $capabilities['apple_pay'] && $capabilities['google_pay'] ), // Add digital wallets to your account. + $container->has( 'save-payment-methods.eligible' ) && ! $container->get( 'save-payment-methods.eligible' ) && $container->has( 'wc-subscriptions.helper' ) && $container->get( 'wc-subscriptions.helper' ) + ->plugin_is_active(), // Configure a PayPal Subscription. + true, // Add PayPal buttons. + $capabilities['apple_pay'], // Register Domain for Apple Pay. + $capabilities['acdc'] && ! ( $capabilities['apple_pay'] && $capabilities['google_pay'] ), // Add digital wallets to your account. $capabilities['acdc'] && ! $capabilities['apple_pay'], // Add Apple Pay to your account. - $capabilities['acdc'] && ! $capabilities['google_pay'], // Add Google Pay to your account. - true, // Configure a PayPal Subscription. - $capabilities['apple_pay'] && ! $gateways['apple_pay'], // Enable Apple Pay. - $capabilities['google_pay'] && ! $gateways['google_pay'], // Enable Google Pay. + $capabilities['acdc'] && ! $capabilities['google_pay'], // Add Google Pay to your account. + $capabilities['apple_pay'] && ! $gateways['apple_pay'], // Enable Apple Pay. + $capabilities['google_pay'] && ! $gateways['google_pay'], // Enable Google Pay. ); }, ); diff --git a/modules/ppcp-settings/src/Data/Definition/TodosDefinition.php b/modules/ppcp-settings/src/Data/Definition/TodosDefinition.php index 204b81467..cb231ed22 100644 --- a/modules/ppcp-settings/src/Data/Definition/TodosDefinition.php +++ b/modules/ppcp-settings/src/Data/Definition/TodosDefinition.php @@ -11,6 +11,7 @@ namespace WooCommerce\PayPalCommerce\Settings\Data\Definition; use WooCommerce\PayPalCommerce\Settings\Service\TodosEligibilityService; use WooCommerce\PayPalCommerce\Settings\Data\GeneralSettings; +use WooCommerce\PayPalCommerce\WcSubscriptions\Helper\SubscriptionHelper; /** * Class TodosDefinition @@ -34,18 +35,28 @@ class TodosDefinition { */ protected GeneralSettings $settings; + /** + * The subscription helper. + * + * @var SubscriptionHelper + */ + protected SubscriptionHelper $subscription_helper; + /** * Constructor. * * @param TodosEligibilityService $eligibilities The todos eligibility service. * @param GeneralSettings $settings The general settings service. + * @param SubscriptionHelper $subscription_helper The subscription helper. */ public function __construct( TodosEligibilityService $eligibilities, - GeneralSettings $settings + GeneralSettings $settings, + SubscriptionHelper $subscription_helper ) { - $this->eligibilities = $eligibilities; - $this->settings = $settings; + $this->eligibilities = $eligibilities; + $this->settings = $settings; + $this->subscription_helper = $subscription_helper; } /** @@ -126,8 +137,11 @@ class TodosDefinition { 'description' => __( 'Connect a subscriptions-type product from WooCommerce with PayPal', 'woocommerce-paypal-payments' ), 'isEligible' => $eligibility_checks['configure_paypal_subscription'], 'action' => array( - 'type' => 'external', - 'url' => admin_url( 'edit.php?post_type=product&product_type=subscription' ), + 'type' => 'external', + 'url' => $this->subscription_helper->has_subscription_products() + ? admin_url( 'edit.php?post_type=product&product_type=subscription' ) // If subscription products exist, go to the subscriptions products archive page. + : admin_url( 'post-new.php?post_type=product' ), // If there are no subscriptions products, go to create one. + 'completeOnClick' => true, ), 'priority' => 5, ), diff --git a/modules/ppcp-settings/src/Service/TodosEligibilityService.php b/modules/ppcp-settings/src/Service/TodosEligibilityService.php index 1f2a385e6..35e83d5a7 100644 --- a/modules/ppcp-settings/src/Service/TodosEligibilityService.php +++ b/modules/ppcp-settings/src/Service/TodosEligibilityService.php @@ -101,13 +101,6 @@ class TodosEligibilityService { */ private bool $is_paypal_buttons_eligible; - /** - * Whether PayPal subscription configuration is eligible. - * - * @var bool - */ - private bool $is_add_subscription_eligible; - /** * Whether enabling Apple Pay is eligible. * @@ -137,7 +130,6 @@ class TodosEligibilityService { * @param bool $is_digital_wallet_eligible Whether digital wallet features are eligible. * @param bool $is_apple_pay_eligible Whether Apple Pay is eligible. * @param bool $is_google_pay_eligible Whether Google Pay is eligible. - * @param bool $is_add_subscription_eligible Whether PayPal subscription configuration is eligible. * @param bool $is_enable_apple_pay_eligible Whether enabling Apple Pay is eligible. * @param bool $is_enable_google_pay_eligible Whether enabling Google Pay is eligible. */ @@ -154,7 +146,6 @@ class TodosEligibilityService { bool $is_digital_wallet_eligible, bool $is_apple_pay_eligible, bool $is_google_pay_eligible, - bool $is_add_subscription_eligible, bool $is_enable_apple_pay_eligible, bool $is_enable_google_pay_eligible ) { @@ -170,7 +161,6 @@ class TodosEligibilityService { $this->is_digital_wallet_eligible = $is_digital_wallet_eligible; $this->is_apple_pay_eligible = $is_apple_pay_eligible; $this->is_google_pay_eligible = $is_google_pay_eligible; - $this->is_add_subscription_eligible = $is_add_subscription_eligible; $this->is_enable_apple_pay_eligible = $is_enable_apple_pay_eligible; $this->is_enable_google_pay_eligible = $is_enable_google_pay_eligible; } diff --git a/modules/ppcp-wc-subscriptions/src/Helper/SubscriptionHelper.php b/modules/ppcp-wc-subscriptions/src/Helper/SubscriptionHelper.php index 45e481728..8bc1e40f5 100644 --- a/modules/ppcp-wc-subscriptions/src/Helper/SubscriptionHelper.php +++ b/modules/ppcp-wc-subscriptions/src/Helper/SubscriptionHelper.php @@ -21,6 +21,7 @@ use WCS_Manual_Renewal_Manager; use WooCommerce\PayPalCommerce\WcGateway\Exception\NotFoundException; use WooCommerce\PayPalCommerce\WcGateway\Gateway\CreditCardGateway; use WooCommerce\PayPalCommerce\WcGateway\Gateway\PayPalGateway; +use WP_Query; /** * Class SubscriptionHelper @@ -342,4 +343,30 @@ class SubscriptionHelper { return ''; } + + /** + * Checks if any subscription products exist. + * + * @return bool + */ + public function has_subscription_products(): bool { + // Query for subscription products. + $args = array( + 'post_type' => 'product', + 'post_status' => 'publish', + 'posts_per_page' => 1, + // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_tax_query + 'tax_query' => array( + array( + 'taxonomy' => 'product_type', + 'field' => 'slug', + 'terms' => 'subscription', + ), + ), + ); + + $subscription_products = new WP_Query( $args ); + + return $subscription_products->have_posts(); + } } From 19fb923d6a952a996a3da4959aba0a29df9a7b83 Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Tue, 18 Feb 2025 12:12:05 +0100 Subject: [PATCH 40/45] =?UTF-8?q?=E2=9C=A8=20Implement=20a=20new=20Connect?= =?UTF-8?q?ionState=20class?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Modern and flexible solution to access connection- and environment-details. --- .../src/Helper/ConnectionState.php | 119 ++++++++++++++++++ .../src/Helper/Environment.php | 2 +- 2 files changed, 120 insertions(+), 1 deletion(-) create mode 100644 modules/ppcp-wc-gateway/src/Helper/ConnectionState.php diff --git a/modules/ppcp-wc-gateway/src/Helper/ConnectionState.php b/modules/ppcp-wc-gateway/src/Helper/ConnectionState.php new file mode 100644 index 000000000..5eb164d1d --- /dev/null +++ b/modules/ppcp-wc-gateway/src/Helper/ConnectionState.php @@ -0,0 +1,119 @@ +is_connected = $is_connected; + $this->environment = $environment; + } + + /** + * Set connection status to "connected to PayPal" (end onboarding). + * + * @param bool $is_sandbox Whether to connect to a sandbox environment. + */ + public function connect( bool $is_sandbox = false ) : void { + $this->is_connected = true; + $this->environment->set_environment( $is_sandbox ); + } + + /** + * Set connection status to "not connected to PayPal" (start onboarding). + */ + public function disconnect() : void { + $this->is_connected = false; + } + + /** + * Returns the managed environment instance. + * + * @return Environment The environment instance. + */ + public function get_environment() : Environment { + return $this->environment; + } + + /** + * Is the merchant connected to a PayPal account? + * + * @return bool True, if onboarding was completed and connection details are present. + */ + public function is_connected() : bool { + return $this->is_connected; + } + + /** + * Is the merchant currently in the "onboarding phase"? + * + * @return bool True, if we don't know merchant connection details. + */ + public function is_onboarding() : bool { + return ! $this->is_connected; + } + + /** + * Is the merchant connected to a sandbox environment? + * + * @return bool True, if connected to a sandbox environment. + */ + public function is_sandbox() : bool { + return $this->is_connected && $this->environment->is_sandbox(); + } + + /** + * Is the merchant connected to a production environment and can receive payments? + * + * @return bool True, if connected to a production environment. + */ + public function is_production() : bool { + return $this->is_connected && $this->environment->is_production(); + } + + /** + * Returns the current environment's name. + * + * @return string Name of the currently connected environment; empty string if not connected. + */ + public function current_environment() : string { + return $this->is_connected ? $this->environment->current_environment() : ''; + } +} diff --git a/modules/ppcp-wc-gateway/src/Helper/Environment.php b/modules/ppcp-wc-gateway/src/Helper/Environment.php index 141e329f5..72df40681 100644 --- a/modules/ppcp-wc-gateway/src/Helper/Environment.php +++ b/modules/ppcp-wc-gateway/src/Helper/Environment.php @@ -45,7 +45,7 @@ class Environment { * * @param bool $is_sandbox Whether this instance represents a sandbox environment. */ - private function set_environment( bool $is_sandbox ) : void { + public function set_environment( bool $is_sandbox ) : void { if ( $is_sandbox ) { $this->environment_name = self::SANDBOX; } else { From 597e4ce0a8d6781e68aa4ce9855e7782caaf1e5a Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Tue, 18 Feb 2025 12:12:48 +0100 Subject: [PATCH 41/45] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Use=20the=20Connecti?= =?UTF-8?q?onState=20class=20in=20the=20new=20UI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/ppcp-settings/services.php | 50 +++++++++++++++++++++++------- 1 file changed, 39 insertions(+), 11 deletions(-) diff --git a/modules/ppcp-settings/services.php b/modules/ppcp-settings/services.php index 4ff09c639..9d6ebd2e7 100644 --- a/modules/ppcp-settings/services.php +++ b/modules/ppcp-settings/services.php @@ -42,6 +42,7 @@ use WooCommerce\PayPalCommerce\PayLaterConfigurator\Factory\ConfigFactory; use WooCommerce\PayPalCommerce\WcGateway\Settings\Settings; use WooCommerce\PayPalCommerce\PayLaterConfigurator\Endpoint\SaveConfig; use WooCommerce\PayPalCommerce\WcGateway\Helper\Environment; +use WooCommerce\PayPalCommerce\WcGateway\Helper\ConnectionState; return array( 'settings.url' => static function ( ContainerInterface $container ) : string { @@ -114,25 +115,52 @@ return array( 'save' => $save_config, ); }, + /** + * Merchant connection details, which includes the connection status + * (onboarding/connected) and connection-aware environment checks. + * This is the preferred solution to check environment and connection state. + */ + 'settings.connection-state' => static function ( ContainerInterface $container ) : ConnectionState { + $data = $container->get( 'settings.data.general' ); + assert( $data instanceof GeneralSettings ); + + $is_connected = $data->is_merchant_connected(); + $environment = new Environment( $data->is_sandbox_merchant() ); + + return new ConnectionState( $is_connected, $environment ); + }, + 'settings.environment' => static function ( ContainerInterface $container ) : Environment { + // We should remove this service in favor of directly using `settings.connection-state`. + $state = $container->get( 'settings.connection-state' ); + assert( $state instanceof ConnectionState ); + + return $state->get_environment(); + }, /** * Checks if valid merchant connection details are stored in the DB. */ 'settings.flag.is-connected' => static function ( ContainerInterface $container ) : bool { - $data = $container->get( 'settings.data.general' ); - assert( $data instanceof GeneralSettings ); + /* + * This service only resolves the connection status once per request. + * We should remove this service in favor of directly using `settings.connection-state`. + */ + $state = $container->get( 'settings.connection-state' ); + assert( $state instanceof ConnectionState ); - return $data->is_merchant_connected(); + return $state->is_connected(); }, + /** + * Checks if the merchant is connected to a sandbox environment. + */ 'settings.flag.is-sandbox' => static function ( ContainerInterface $container ) : bool { - $data = $container->get( 'settings.data.general' ); - assert( $data instanceof GeneralSettings ); + /* + * This service only resolves the sandbox flag once per request. + * We should remove this service in favor of directly using `settings.connection-state`. + */ + $state = $container->get( 'settings.connection-state' ); + assert( $state instanceof ConnectionState ); - return $data->is_sandbox_merchant(); - }, - 'settings.environment' => static function ( ContainerInterface $container ) : Environment { - return new Environment( - $container->get( 'settings.flag.is-sandbox' ) - ); + return $state->is_sandbox(); }, 'settings.rest.onboarding' => static function ( ContainerInterface $container ) : OnboardingRestEndpoint { return new OnboardingRestEndpoint( $container->get( 'settings.data.onboarding' ) ); From 2d40768e83815bba8fc9c1e51d19baea4390218e Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Tue, 18 Feb 2025 12:24:58 +0100 Subject: [PATCH 42/45] =?UTF-8?q?=F0=9F=91=94=20Sync=20the=20connection=20?= =?UTF-8?q?state=20with=20authentication?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/ppcp-settings/services.php | 1 + .../src/Service/AuthenticationManager.php | 37 ++++++++++++++----- 2 files changed, 28 insertions(+), 10 deletions(-) diff --git a/modules/ppcp-settings/services.php b/modules/ppcp-settings/services.php index 9d6ebd2e7..301939541 100644 --- a/modules/ppcp-settings/services.php +++ b/modules/ppcp-settings/services.php @@ -306,6 +306,7 @@ return array( $container->get( 'api.env.paypal-host' ), $container->get( 'api.env.endpoint.login-seller' ), $container->get( 'api.repository.partner-referrals-data' ), + $container->get( 'settings.connection-state' ), $container->get( 'woocommerce.logger.woocommerce' ), ); }, diff --git a/modules/ppcp-settings/src/Service/AuthenticationManager.php b/modules/ppcp-settings/src/Service/AuthenticationManager.php index 2eeb8f13e..f8b04a096 100644 --- a/modules/ppcp-settings/src/Service/AuthenticationManager.php +++ b/modules/ppcp-settings/src/Service/AuthenticationManager.php @@ -24,6 +24,7 @@ use WooCommerce\WooCommerce\Logging\Logger\NullLogger; use WooCommerce\PayPalCommerce\Settings\DTO\MerchantConnectionDTO; use WooCommerce\PayPalCommerce\Webhooks\WebhookRegistrar; use WooCommerce\PayPalCommerce\Settings\Enum\SellerTypeEnum; +use WooCommerce\PayPalCommerce\WcGateway\Helper\ConnectionState; /** * Class that manages the connection to PayPal. @@ -64,27 +65,37 @@ class AuthenticationManager { */ private PartnerReferralsData $referrals_data; + /** + * The connection state manager. + * + * @var ConnectionState + */ + private ConnectionState $connection_state; + /** * Constructor. * - * @param GeneralSettings $common_settings Data model that stores the connection details. - * @param EnvironmentConfig $connection_host API host for direct authentication. - * @param EnvironmentConfig $login_endpoint API handler to fetch merchant credentials. - * @param PartnerReferralsData $referrals_data Partner referrals data. - * @param ?LoggerInterface $logger Logging instance. + * @param GeneralSettings $common_settings Data model that stores the connection details. + * @param EnvironmentConfig $connection_host API host for direct authentication. + * @param EnvironmentConfig $login_endpoint API handler to fetch merchant credentials. + * @param PartnerReferralsData $referrals_data Partner referrals data. + * @param ConnectionState $connection_state Connection state manager. + * @param ?LoggerInterface $logger Logging instance. */ public function __construct( GeneralSettings $common_settings, EnvironmentConfig $connection_host, EnvironmentConfig $login_endpoint, PartnerReferralsData $referrals_data, + ConnectionState $connection_state, ?LoggerInterface $logger = null ) { - $this->common_settings = $common_settings; - $this->connection_host = $connection_host; - $this->login_endpoint = $login_endpoint; - $this->referrals_data = $referrals_data; - $this->logger = $logger ?: new NullLogger(); + $this->common_settings = $common_settings; + $this->connection_host = $connection_host; + $this->login_endpoint = $login_endpoint; + $this->referrals_data = $referrals_data; + $this->connection_state = $connection_state; + $this->logger = $logger ?: new NullLogger(); } /** @@ -112,6 +123,9 @@ class AuthenticationManager { $this->common_settings->reset_merchant_data(); $this->common_settings->save(); + // Update the connection status and clear the environment flags. + $this->connection_state->disconnect(); + /** * Broadcast, that the plugin disconnected from PayPal. This allows other * modules to clean up merchant-related details, such as eligibility flags. @@ -420,6 +434,9 @@ class AuthenticationManager { if ( $this->common_settings->is_merchant_connected() ) { $this->logger->info( 'Merchant successfully connected to PayPal' ); + // Update the connection status and set the environment flags. + $this->connection_state->connect( $connection->is_sandbox ); + /** * Request to flush caches before authenticating the merchant, to * ensure the new merchant does not use stale data from previous From c732f53acb2187e6484a1135e5dbd83671866a56 Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Tue, 18 Feb 2025 12:34:41 +0100 Subject: [PATCH 43/45] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Small=20adjustments?= =?UTF-8?q?=20and=20improvements?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/Helper/ConnectionState.php | 16 +++++++ .../src/Helper/Environment.php | 42 +++++++++++++++---- 2 files changed, 50 insertions(+), 8 deletions(-) diff --git a/modules/ppcp-wc-gateway/src/Helper/ConnectionState.php b/modules/ppcp-wc-gateway/src/Helper/ConnectionState.php index 5eb164d1d..3ee969a84 100644 --- a/modules/ppcp-wc-gateway/src/Helper/ConnectionState.php +++ b/modules/ppcp-wc-gateway/src/Helper/ConnectionState.php @@ -52,6 +52,14 @@ class ConnectionState { * @param bool $is_sandbox Whether to connect to a sandbox environment. */ public function connect( bool $is_sandbox = false ) : void { + if ( ! $this->is_connected ) { + /** + * Action that fires before the connection status changes from + * disconnected to connected. + */ + do_action( 'woocommerce_paypal_payments_merchant_connection_change', true ); + } + $this->is_connected = true; $this->environment->set_environment( $is_sandbox ); } @@ -60,6 +68,14 @@ class ConnectionState { * Set connection status to "not connected to PayPal" (start onboarding). */ public function disconnect() : void { + if ( $this->is_connected ) { + /** + * Action that fires before the connection status changes from + * connected to disconnected. + */ + do_action( 'woocommerce_paypal_payments_merchant_connection_change', false ); + } + $this->is_connected = false; } diff --git a/modules/ppcp-wc-gateway/src/Helper/Environment.php b/modules/ppcp-wc-gateway/src/Helper/Environment.php index 72df40681..e855b54b4 100644 --- a/modules/ppcp-wc-gateway/src/Helper/Environment.php +++ b/modules/ppcp-wc-gateway/src/Helper/Environment.php @@ -29,7 +29,7 @@ class Environment { * * @var string */ - private string $environment_name = ''; + private string $environment_name; /** * Environment constructor. @@ -37,20 +37,46 @@ class Environment { * @param bool $is_sandbox Whether this instance represents a sandbox environment. */ public function __construct( bool $is_sandbox = false ) { - $this->set_environment( $is_sandbox ); + $this->environment_name = $this->prepare_environment_name( $is_sandbox ); } /** - * Sets the current environment. + * Returns a valid environment name based on the provided argument. + * + * @param bool $is_sandbox Whether this instance represents a sandbox environment. + * @return string The environment name. + */ + private function prepare_environment_name( bool $is_sandbox ) : string { + if ( $is_sandbox ) { + return self::SANDBOX; + } + + return self::PRODUCTION; + } + + /** + * Updates the current environment. * * @param bool $is_sandbox Whether this instance represents a sandbox environment. */ public function set_environment( bool $is_sandbox ) : void { - if ( $is_sandbox ) { - $this->environment_name = self::SANDBOX; - } else { - $this->environment_name = self::PRODUCTION; + $new_environment = $this->prepare_environment_name( $is_sandbox ); + + if ( $new_environment !== $this->environment_name ) { + /** + * Action that fires before the environment status changes. + * + * @param string $new_environment The new environment name. + * @param string $old_environment The previous environment name. + */ + do_action( + 'woocommerce_paypal_payments_merchant_environment_change', + $new_environment, + $this->environment_name + ); } + + $this->environment_name = $new_environment; } /** @@ -65,7 +91,7 @@ class Environment { /** * Detect whether the current environment equals $environment * - * @deprecated Use the is_sandbox() and is_production() methods instead. + * @deprecated 3.0.0 - Use the is_sandbox() and is_production() methods instead. * These methods provide better encapsulation, are less error-prone, * and improve code readability by removing the need to pass environment constants. * @param string $environment The value to check against. From 9f446574000af819c2574e0654b91fc392ba1898 Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Tue, 18 Feb 2025 13:04:51 +0100 Subject: [PATCH 44/45] =?UTF-8?q?=F0=9F=92=A1=20Document=20use=20of=20?= =?UTF-8?q?=E2=80=9Csettings->set()=E2=80=9D=20via=20comments?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ppcp-applepay/src/Assets/AppleProductStatus.php | 1 + .../src/Endpoint/ApproveOrderEndpoint.php | 3 ++- .../ppcp-googlepay/src/Helper/ApmProductStatus.php | 1 + .../src/LocalApmProductStatus.php | 1 + .../src/Endpoint/SaveConfig.php | 1 + modules/ppcp-wc-gateway/src/Cli/SettingsCommand.php | 1 + .../src/Gateway/PayUponInvoice/PayUponInvoice.php | 4 ++++ .../ppcp-wc-gateway/src/Helper/DCCProductStatus.php | 1 + .../src/Helper/PayUponInvoiceProductStatus.php | 1 + .../src/Settings/SettingsListener.php | 12 ++++++++++++ 10 files changed, 25 insertions(+), 1 deletion(-) diff --git a/modules/ppcp-applepay/src/Assets/AppleProductStatus.php b/modules/ppcp-applepay/src/Assets/AppleProductStatus.php index 61668c26d..c7ff102fe 100644 --- a/modules/ppcp-applepay/src/Assets/AppleProductStatus.php +++ b/modules/ppcp-applepay/src/Assets/AppleProductStatus.php @@ -89,6 +89,7 @@ class AppleProductStatus extends ProductStatus { } } + // Settings used as a cache; `settings->set` is compatible with new UI. if ( $has_capability ) { $this->settings->set( self::SETTINGS_KEY, self::SETTINGS_VALUE_ENABLED ); } else { diff --git a/modules/ppcp-button/src/Endpoint/ApproveOrderEndpoint.php b/modules/ppcp-button/src/Endpoint/ApproveOrderEndpoint.php index 775be302e..2e8cc4c0b 100644 --- a/modules/ppcp-button/src/Endpoint/ApproveOrderEndpoint.php +++ b/modules/ppcp-button/src/Endpoint/ApproveOrderEndpoint.php @@ -272,8 +272,9 @@ class ApproveOrderEndpoint implements EndpointInterface { * @return void */ protected function toggle_final_review_enabled_setting(): void { + // TODO new-ux: This flag must also be updated in the new settings. $final_review_enabled_setting = $this->settings->has( 'blocks_final_review_enabled' ) && $this->settings->get( 'blocks_final_review_enabled' ); - $final_review_enabled_setting ? $this->settings->set( 'blocks_final_review_enabled', false ) : $this->settings->set( 'blocks_final_review_enabled', true ); + $this->settings->set( 'blocks_final_review_enabled', ! $final_review_enabled_setting ); $this->settings->persist(); } } diff --git a/modules/ppcp-googlepay/src/Helper/ApmProductStatus.php b/modules/ppcp-googlepay/src/Helper/ApmProductStatus.php index dbe812837..20917eac7 100644 --- a/modules/ppcp-googlepay/src/Helper/ApmProductStatus.php +++ b/modules/ppcp-googlepay/src/Helper/ApmProductStatus.php @@ -89,6 +89,7 @@ class ApmProductStatus extends ProductStatus { } } + // Settings used as a cache; `settings->set` is compatible with new UI. if ( $has_capability ) { $this->settings->set( self::SETTINGS_KEY, self::SETTINGS_VALUE_ENABLED ); } else { diff --git a/modules/ppcp-local-alternative-payment-methods/src/LocalApmProductStatus.php b/modules/ppcp-local-alternative-payment-methods/src/LocalApmProductStatus.php index 2a89146be..546a94d15 100644 --- a/modules/ppcp-local-alternative-payment-methods/src/LocalApmProductStatus.php +++ b/modules/ppcp-local-alternative-payment-methods/src/LocalApmProductStatus.php @@ -71,6 +71,7 @@ class LocalApmProductStatus extends ProductStatus { } } + // Settings used as a cache; `settings->set` is compatible with new UI. if ( $has_capability ) { $this->settings->set( self::SETTINGS_KEY, self::SETTINGS_VALUE_ENABLED ); } else { diff --git a/modules/ppcp-paylater-configurator/src/Endpoint/SaveConfig.php b/modules/ppcp-paylater-configurator/src/Endpoint/SaveConfig.php index b1f77de85..6c1dc4b41 100644 --- a/modules/ppcp-paylater-configurator/src/Endpoint/SaveConfig.php +++ b/modules/ppcp-paylater-configurator/src/Endpoint/SaveConfig.php @@ -95,6 +95,7 @@ class SaveConfig { * @param array $config The configurator config. */ public function save_config( array $config ): void { + // TODO new-ux: We should convert this to a new AbstractDataModel class in the settings folder! $this->settings->set( 'pay_later_enable_styling_per_messaging_location', true ); $this->settings->set( 'pay_later_messaging_enabled', true ); diff --git a/modules/ppcp-wc-gateway/src/Cli/SettingsCommand.php b/modules/ppcp-wc-gateway/src/Cli/SettingsCommand.php index f67c7c6f1..1bb186a25 100644 --- a/modules/ppcp-wc-gateway/src/Cli/SettingsCommand.php +++ b/modules/ppcp-wc-gateway/src/Cli/SettingsCommand.php @@ -62,6 +62,7 @@ class SettingsCommand { $value = false; } + // TODO new-ux: The setting must also be updated in the new settings. $this->settings->set( $key, $value ); $this->settings->persist(); diff --git a/modules/ppcp-wc-gateway/src/Gateway/PayUponInvoice/PayUponInvoice.php b/modules/ppcp-wc-gateway/src/Gateway/PayUponInvoice/PayUponInvoice.php index 7ed9532e8..10ec5ab2c 100644 --- a/modules/ppcp-wc-gateway/src/Gateway/PayUponInvoice/PayUponInvoice.php +++ b/modules/ppcp-wc-gateway/src/Gateway/PayUponInvoice/PayUponInvoice.php @@ -137,6 +137,10 @@ class PayUponInvoice { */ public function init(): void { if ( $this->pui_helper->is_pui_gateway_enabled() ) { + /* + * TODO new-ux: Check if we still support this setting, or if it's always enabled. + * If fraudnet is not configurable in new UI, we can ignore this. + */ $this->settings->set( 'fraudnet_enabled', true ); $this->settings->persist(); } diff --git a/modules/ppcp-wc-gateway/src/Helper/DCCProductStatus.php b/modules/ppcp-wc-gateway/src/Helper/DCCProductStatus.php index d82271b60..980b4d2d0 100644 --- a/modules/ppcp-wc-gateway/src/Helper/DCCProductStatus.php +++ b/modules/ppcp-wc-gateway/src/Helper/DCCProductStatus.php @@ -103,6 +103,7 @@ class DCCProductStatus extends ProductStatus { continue; } + // Settings used as a cache; `settings->set` is compatible with new UI. if ( in_array( 'CUSTOM_CARD_PROCESSING', $product->capabilities(), true ) ) { $this->settings->set( self::SETTINGS_KEY, self::SETTINGS_VALUE_ENABLED ); $this->settings->persist(); diff --git a/modules/ppcp-wc-gateway/src/Helper/PayUponInvoiceProductStatus.php b/modules/ppcp-wc-gateway/src/Helper/PayUponInvoiceProductStatus.php index 250138089..64192bd87 100644 --- a/modules/ppcp-wc-gateway/src/Helper/PayUponInvoiceProductStatus.php +++ b/modules/ppcp-wc-gateway/src/Helper/PayUponInvoiceProductStatus.php @@ -96,6 +96,7 @@ class PayUponInvoiceProductStatus extends ProductStatus { continue; } + // Settings used as a cache; `settings->set` is compatible with new UI. if ( in_array( 'PAY_UPON_INVOICE', $product->capabilities(), true ) ) { $this->settings->set( self::SETTINGS_KEY, self::SETTINGS_VALUE_ENABLED ); $this->settings->persist(); diff --git a/modules/ppcp-wc-gateway/src/Settings/SettingsListener.php b/modules/ppcp-wc-gateway/src/Settings/SettingsListener.php index e6b6fa1b9..b612de369 100644 --- a/modules/ppcp-wc-gateway/src/Settings/SettingsListener.php +++ b/modules/ppcp-wc-gateway/src/Settings/SettingsListener.php @@ -263,6 +263,8 @@ class SettingsListener { // phpcs:enable WordPress.Security.NonceVerification.Missing // phpcs:enable WordPress.Security.NonceVerification.Recommended + // This method is only used for legacy UI, `settings->set` is valid here. + $this->settings->set( 'merchant_id', $merchant_id ); $this->settings->set( 'merchant_email', $merchant_email ); @@ -365,6 +367,8 @@ class SettingsListener { return; } + // This method is only used for legacy UI, `settings->set` is valid here. + try { $token = $this->bearer->bearer(); if ( ! $token->vaulting_available() ) { @@ -474,6 +478,10 @@ class SettingsListener { && 1 === absint( $_POST['woocommerce_ppcp-gateway_enabled'] ); } + // This method initializes a feature cache. This initialization is not + // required by the new UI; we can ignore the `settings->set` usage. + // TODO new-ux: Test, if this method is called or some non-settings parts must be converted. + // phpcs:enable phpcs:disable WordPress.Security.NonceVerification.Missing // phpcs:enable phpcs:disable WordPress.Security.NonceVerification.Missing if ( $credentials_change_status ) { @@ -722,6 +730,8 @@ class SettingsListener { /** * Prevent enabling tracking if it is not enabled for merchant account. * + * This method is not used anywhere. Not relevant for new-ux. + * * @throws RuntimeException When API request fails. */ public function listen_for_tracking_enabled(): void { @@ -767,6 +777,8 @@ class SettingsListener { return; } + // This method is only used for legacy UI, `settings->set` is valid here. + $existing_setting_value = $this->settings->has( $setting_slug ) ? $this->settings->get( $setting_slug ) : null; if ( $condition ) { From 167e12e54e5c029246289718a4b2f38be2a51fe2 Mon Sep 17 00:00:00 2001 From: Narek Zakarian Date: Tue, 18 Feb 2025 16:55:01 +0400 Subject: [PATCH 45/45] Conditionally check/uncheck the Order Intent --- .../ReusableComponents/Controls/ControlToggleButton.js | 9 ++++++++- .../Settings/Components/Settings/Blocks/OrderIntent.js | 8 ++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/modules/ppcp-settings/resources/js/Components/ReusableComponents/Controls/ControlToggleButton.js b/modules/ppcp-settings/resources/js/Components/ReusableComponents/Controls/ControlToggleButton.js index 2d648e20b..cbef51f5d 100644 --- a/modules/ppcp-settings/resources/js/Components/ReusableComponents/Controls/ControlToggleButton.js +++ b/modules/ppcp-settings/resources/js/Components/ReusableComponents/Controls/ControlToggleButton.js @@ -1,7 +1,13 @@ import { ToggleControl } from '@wordpress/components'; import { Action, Description } from '../Elements'; -const ControlToggleButton = ( { label, description, value, onChange } ) => ( +const ControlToggleButton = ( { + label, + description, + value, + onChange, + disabled = false, +} ) => ( ( help={ description ? { description } : null } + disabled={ disabled } /> ); diff --git a/modules/ppcp-settings/resources/js/Components/Screens/Settings/Components/Settings/Blocks/OrderIntent.js b/modules/ppcp-settings/resources/js/Components/Screens/Settings/Components/Settings/Blocks/OrderIntent.js index 77fab7362..c67c8a768 100644 --- a/modules/ppcp-settings/resources/js/Components/Screens/Settings/Components/Settings/Blocks/OrderIntent.js +++ b/modules/ppcp-settings/resources/js/Components/Screens/Settings/Components/Settings/Blocks/OrderIntent.js @@ -1,4 +1,5 @@ import { __ } from '@wordpress/i18n'; +import { useEffect } from 'react'; import { ControlToggleButton } from '../../../../../ReusableComponents/Controls'; import SettingsBlock from '../../../../../ReusableComponents/SettingsBlock'; @@ -12,6 +13,12 @@ const OrderIntent = () => { setCaptureVirtualOnlyOrders, } = SettingsHooks.useSettings(); + useEffect( () => { + if ( ! authorizeOnly && captureVirtualOnlyOrders ) { + setCaptureVirtualOnlyOrders( false ); + } + }, [ authorizeOnly ] ); + return ( { ) } onChange={ setCaptureVirtualOnlyOrders } value={ captureVirtualOnlyOrders } + disabled={ ! authorizeOnly } /> );