From c732f53acb2187e6484a1135e5dbd83671866a56 Mon Sep 17 00:00:00 2001
From: Philipp Stracker
Date: Tue, 18 Feb 2025 12:34:41 +0100
Subject: [PATCH] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Small=20adjustments=20and?=
=?UTF-8?q?=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.