From b5e156d74c7b6407e2d7740f207944ca3ad977b6 Mon Sep 17 00:00:00 2001 From: Emili Castells Guasch Date: Tue, 26 Sep 2023 11:59:10 +0200 Subject: [PATCH 1/6] Fix subscriptions product class not found --- .../ppcp-subscription/src/SubscriptionModule.php | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/modules/ppcp-subscription/src/SubscriptionModule.php b/modules/ppcp-subscription/src/SubscriptionModule.php index 67c2b5c89..9193768e1 100644 --- a/modules/ppcp-subscription/src/SubscriptionModule.php +++ b/modules/ppcp-subscription/src/SubscriptionModule.php @@ -194,7 +194,18 @@ class SubscriptionModule implements ModuleInterface { //phpcs:disable WordPress.Security.NonceVerification.Recommended $post_id = wc_clean( wp_unslash( $_GET['post'] ?? '' ) ); $product = wc_get_product( $post_id ); - if ( ! ( is_a( $product, WC_Product::class ) || is_a( $product, WC_Product_Subscription_Variation::class ) ) || ! WC_Subscriptions_Product::is_subscription( $product ) ) { + if ( ! ( is_a( $product, WC_Product::class ) )) { + return; + } + + $subscriptions_helper = $c->get('subscription.helper'); + assert($subscriptions_helper instanceof SubscriptionHelper); + + if( + !$subscriptions_helper->plugin_is_active() + || ! is_a( $product, WC_Product_Subscription_Variation::class ) + || ! WC_Subscriptions_Product::is_subscription( $product ) + ) { return; } From 55c3b4f2c575d98441f43f1fa3376c7ea069a8a7 Mon Sep 17 00:00:00 2001 From: Emili Castells Guasch Date: Tue, 26 Sep 2023 12:09:21 +0200 Subject: [PATCH 2/6] Fix psalm --- modules/ppcp-subscription/src/SubscriptionModule.php | 1 - 1 file changed, 1 deletion(-) diff --git a/modules/ppcp-subscription/src/SubscriptionModule.php b/modules/ppcp-subscription/src/SubscriptionModule.php index 9193768e1..1731bc2e8 100644 --- a/modules/ppcp-subscription/src/SubscriptionModule.php +++ b/modules/ppcp-subscription/src/SubscriptionModule.php @@ -221,7 +221,6 @@ class SubscriptionModule implements ModuleInterface { $products = array( $this->set_product_config( $product ) ); if ( $product->get_type() === 'variable-subscription' ) { $products = array(); - assert( $product instanceof WC_Product_Variable ); $available_variations = $product->get_available_variations(); foreach ( $available_variations as $variation ) { /** From 30c1f61f3048edd83928c12c32f7db4337972195 Mon Sep 17 00:00:00 2001 From: Emili Castells Guasch Date: Tue, 26 Sep 2023 12:30:58 +0200 Subject: [PATCH 3/6] Fix psalm --- modules/ppcp-subscription/src/SubscriptionModule.php | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/modules/ppcp-subscription/src/SubscriptionModule.php b/modules/ppcp-subscription/src/SubscriptionModule.php index 1731bc2e8..487d9eba3 100644 --- a/modules/ppcp-subscription/src/SubscriptionModule.php +++ b/modules/ppcp-subscription/src/SubscriptionModule.php @@ -221,6 +221,13 @@ class SubscriptionModule implements ModuleInterface { $products = array( $this->set_product_config( $product ) ); if ( $product->get_type() === 'variable-subscription' ) { $products = array(); + + /** + * @psalm-suppress TypeDoesNotContainType + * + * WC_Product_Variable_Subscription extends WC_Product_Variable. + */ + assert( $product instanceof WC_Product_Variable ); $available_variations = $product->get_available_variations(); foreach ( $available_variations as $variation ) { /** From 7c4605d39bb8d17c82b95d53ae80f7024f86b58f Mon Sep 17 00:00:00 2001 From: Emili Castells Guasch Date: Tue, 26 Sep 2023 12:39:09 +0200 Subject: [PATCH 4/6] Fix subscriptions product class not found --- modules/ppcp-subscription/src/SubscriptionModule.php | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/modules/ppcp-subscription/src/SubscriptionModule.php b/modules/ppcp-subscription/src/SubscriptionModule.php index 487d9eba3..84c91d88e 100644 --- a/modules/ppcp-subscription/src/SubscriptionModule.php +++ b/modules/ppcp-subscription/src/SubscriptionModule.php @@ -558,8 +558,13 @@ class SubscriptionModule implements ModuleInterface { */ function( $variation_id ) use ( $c ) { $wcsnonce_save_variations = wc_clean( wp_unslash( $_POST['_wcsnonce_save_variations'] ?? '' ) ); + + $subscriptions_helper = $c->get('subscription.helper'); + assert($subscriptions_helper instanceof SubscriptionHelper); + if ( - ! WC_Subscriptions_Product::is_subscription( $variation_id ) + !$subscriptions_helper->plugin_is_active() + || ! WC_Subscriptions_Product::is_subscription( $variation_id ) || ! is_string( $wcsnonce_save_variations ) || ! wp_verify_nonce( $wcsnonce_save_variations, 'wcs_subscription_variations' ) ) { From a8c2cb90353b02eee9317b0a768c1fe77a802814 Mon Sep 17 00:00:00 2001 From: Emili Castells Guasch Date: Tue, 26 Sep 2023 14:30:59 +0200 Subject: [PATCH 5/6] Check if `WC_Subscriptions_Product` class exist in `plugin_is_active` --- modules/ppcp-subscription/src/Helper/SubscriptionHelper.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/modules/ppcp-subscription/src/Helper/SubscriptionHelper.php b/modules/ppcp-subscription/src/Helper/SubscriptionHelper.php index b09566c3e..760293541 100644 --- a/modules/ppcp-subscription/src/Helper/SubscriptionHelper.php +++ b/modules/ppcp-subscription/src/Helper/SubscriptionHelper.php @@ -13,6 +13,7 @@ namespace WooCommerce\PayPalCommerce\Subscription\Helper; use WC_Product; use WC_Product_Subscription_Variation; +use WC_Subscriptions; use WC_Subscriptions_Product; use WooCommerce\PayPalCommerce\WcGateway\Settings\Settings; use WooCommerce\PayPalCommerce\WcGateway\Exception\NotFoundException; @@ -120,7 +121,7 @@ class SubscriptionHelper { */ public function plugin_is_active(): bool { - return class_exists( \WC_Subscriptions::class ); + return class_exists( WC_Subscriptions::class ) && class_exists(WC_Subscriptions_Product::class); } /** From 3fc228589fa0703c68a19790da9759d2a3eb223b Mon Sep 17 00:00:00 2001 From: Pedro Silva Date: Tue, 26 Sep 2023 14:22:25 +0100 Subject: [PATCH 6/6] Fix lint --- .../src/Helper/SubscriptionHelper.php | 2 +- .../src/SubscriptionModule.php | 18 ++++++++++-------- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/modules/ppcp-subscription/src/Helper/SubscriptionHelper.php b/modules/ppcp-subscription/src/Helper/SubscriptionHelper.php index 760293541..9f803c5c5 100644 --- a/modules/ppcp-subscription/src/Helper/SubscriptionHelper.php +++ b/modules/ppcp-subscription/src/Helper/SubscriptionHelper.php @@ -121,7 +121,7 @@ class SubscriptionHelper { */ public function plugin_is_active(): bool { - return class_exists( WC_Subscriptions::class ) && class_exists(WC_Subscriptions_Product::class); + return class_exists( WC_Subscriptions::class ) && class_exists( WC_Subscriptions_Product::class ); } /** diff --git a/modules/ppcp-subscription/src/SubscriptionModule.php b/modules/ppcp-subscription/src/SubscriptionModule.php index 84c91d88e..505794a6b 100644 --- a/modules/ppcp-subscription/src/SubscriptionModule.php +++ b/modules/ppcp-subscription/src/SubscriptionModule.php @@ -194,15 +194,15 @@ class SubscriptionModule implements ModuleInterface { //phpcs:disable WordPress.Security.NonceVerification.Recommended $post_id = wc_clean( wp_unslash( $_GET['post'] ?? '' ) ); $product = wc_get_product( $post_id ); - if ( ! ( is_a( $product, WC_Product::class ) )) { + if ( ! ( is_a( $product, WC_Product::class ) ) ) { return; } - $subscriptions_helper = $c->get('subscription.helper'); - assert($subscriptions_helper instanceof SubscriptionHelper); + $subscriptions_helper = $c->get( 'subscription.helper' ); + assert( $subscriptions_helper instanceof SubscriptionHelper ); - if( - !$subscriptions_helper->plugin_is_active() + if ( + ! $subscriptions_helper->plugin_is_active() || ! is_a( $product, WC_Product_Subscription_Variation::class ) || ! WC_Subscriptions_Product::is_subscription( $product ) ) { @@ -223,6 +223,8 @@ class SubscriptionModule implements ModuleInterface { $products = array(); /** + * Suppress pslam. + * * @psalm-suppress TypeDoesNotContainType * * WC_Product_Variable_Subscription extends WC_Product_Variable. @@ -559,11 +561,11 @@ class SubscriptionModule implements ModuleInterface { function( $variation_id ) use ( $c ) { $wcsnonce_save_variations = wc_clean( wp_unslash( $_POST['_wcsnonce_save_variations'] ?? '' ) ); - $subscriptions_helper = $c->get('subscription.helper'); - assert($subscriptions_helper instanceof SubscriptionHelper); + $subscriptions_helper = $c->get( 'subscription.helper' ); + assert( $subscriptions_helper instanceof SubscriptionHelper ); if ( - !$subscriptions_helper->plugin_is_active() + ! $subscriptions_helper->plugin_is_active() || ! WC_Subscriptions_Product::is_subscription( $variation_id ) || ! is_string( $wcsnonce_save_variations ) || ! wp_verify_nonce( $wcsnonce_save_variations, 'wcs_subscription_variations' )