From 4ab2c0ff48fcefc367da512fb1c469848b3a4310 Mon Sep 17 00:00:00 2001 From: Narek Zakarian Date: Fri, 17 May 2024 18:07:06 +0400 Subject: [PATCH] Add filter to on and off the toggle --- modules/ppcp-button/services.php | 2 ++ .../src/Endpoint/ApproveOrderEndpoint.php | 28 +++++++++++++++++-- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/modules/ppcp-button/services.php b/modules/ppcp-button/services.php index 7c564d1ef..3d14c9a74 100644 --- a/modules/ppcp-button/services.php +++ b/modules/ppcp-button/services.php @@ -239,6 +239,7 @@ return array( $final_review_enabled = $container->get( 'blocks.settings.final_review_enabled' ); $wc_order_creator = $container->get( 'button.helper.wc-order-creator' ); $gateway = $container->get( 'wcgateway.paypal-gateway' ); + $subscription_helper = $container->get( 'wc-subscriptions.helper' ); $logger = $container->get( 'woocommerce.logger.woocommerce' ); return new ApproveOrderEndpoint( $request_data, @@ -251,6 +252,7 @@ return array( $final_review_enabled, $gateway, $wc_order_creator, + $subscription_helper, $logger ); }, diff --git a/modules/ppcp-button/src/Endpoint/ApproveOrderEndpoint.php b/modules/ppcp-button/src/Endpoint/ApproveOrderEndpoint.php index 4bd7b2f80..9e3d43c6f 100644 --- a/modules/ppcp-button/src/Endpoint/ApproveOrderEndpoint.php +++ b/modules/ppcp-button/src/Endpoint/ApproveOrderEndpoint.php @@ -24,6 +24,7 @@ use WooCommerce\PayPalCommerce\Button\Helper\WooCommerceOrderCreator; use WooCommerce\PayPalCommerce\Session\SessionHandler; use WooCommerce\PayPalCommerce\WcGateway\Gateway\PayPalGateway; use WooCommerce\PayPalCommerce\WcGateway\Settings\Settings; +use WooCommerce\PayPalCommerce\WcSubscriptions\Helper\SubscriptionHelper; /** * Class ApproveOrderEndpoint @@ -104,6 +105,13 @@ class ApproveOrderEndpoint implements EndpointInterface { */ protected $wc_order_creator; + /** + * The Subscription Helper. + * + * @var SubscriptionHelper + */ + protected $subscription_helper; + /** * The logger. * @@ -124,6 +132,7 @@ class ApproveOrderEndpoint implements EndpointInterface { * @param bool $final_review_enabled Whether the final review is enabled. * @param PayPalGateway $gateway The WC gateway. * @param WooCommerceOrderCreator $wc_order_creator The WooCommerce order creator. + * @param SubscriptionHelper $subscription_helper The subscription helper. * @param LoggerInterface $logger The logger. */ public function __construct( @@ -137,6 +146,7 @@ class ApproveOrderEndpoint implements EndpointInterface { bool $final_review_enabled, PayPalGateway $gateway, WooCommerceOrderCreator $wc_order_creator, + SubscriptionHelper $subscription_helper, LoggerInterface $logger ) { @@ -150,6 +160,7 @@ class ApproveOrderEndpoint implements EndpointInterface { $this->final_review_enabled = $final_review_enabled; $this->gateway = $gateway; $this->wc_order_creator = $wc_order_creator; + $this->subscription_helper = $subscription_helper; $this->logger = $logger; } @@ -236,9 +247,9 @@ class ApproveOrderEndpoint implements EndpointInterface { $this->session_handler->replace_order( $order ); - $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->persist(); + if ( ! $this->subscription_helper->plugin_is_active() && apply_filters( 'woocommerce_paypal_payments_toggle_final_review_checkbox', false ) ) { + $this->toggle_final_review_enabled_setting(); + } $should_create_wc_order = $data['should_create_wc_order'] ?? false; if ( ! $this->final_review_enabled && ! $this->is_checkout() && $should_create_wc_order ) { @@ -264,4 +275,15 @@ class ApproveOrderEndpoint implements EndpointInterface { return false; } } + + /** + * Will toggle the "final confirmation" checkbox. + * + * @return void + */ + protected function toggle_final_review_enabled_setting(): void { + $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->persist(); + } }