diff --git a/.psalm/wcs.php b/.psalm/wcs.php index 873fd4d50..a35088c88 100644 --- a/.psalm/wcs.php +++ b/.psalm/wcs.php @@ -2084,3 +2084,12 @@ function wcs_find_matching_line_item($order, $subscription_item, $match_type = ' function wcs_order_contains_product($order, $product) { } + +/** + * Get page ID for a specific WC resource. + * + * @param string $for Name of the resource. + * + * @return string Page ID. Empty string if resource not found. + */ +function wc_get_page_screen_id( $for ) {} diff --git a/modules/ppcp-subscription/src/DeactivatePlanEndpoint.php b/modules/ppcp-subscription/src/DeactivatePlanEndpoint.php index c2d490e81..fe10c0638 100644 --- a/modules/ppcp-subscription/src/DeactivatePlanEndpoint.php +++ b/modules/ppcp-subscription/src/DeactivatePlanEndpoint.php @@ -10,6 +10,7 @@ declare( strict_types=1 ); namespace WooCommerce\PayPalCommerce\Subscription; use Exception; +use WC_Product; use WC_Subscriptions_Product; use WooCommerce\PayPalCommerce\ApiClient\Endpoint\BillingPlans; use WooCommerce\PayPalCommerce\Button\Endpoint\RequestData; @@ -68,7 +69,7 @@ class DeactivatePlanEndpoint { $product_id = $data['product_id'] ?? ''; if ( $product_id ) { $product = wc_get_product( $product_id ); - if ( WC_Subscriptions_Product::is_subscription( $product ) ) { + if ( is_a( $product, WC_Product::class ) && WC_Subscriptions_Product::is_subscription( $product ) ) { $product->delete_meta_data( '_ppcp_enable_subscription_product' ); $product->delete_meta_data( '_ppcp_subscription_plan_name' ); $product->delete_meta_data( 'ppcp_subscription_product' ); diff --git a/modules/ppcp-subscription/src/SubscriptionModule.php b/modules/ppcp-subscription/src/SubscriptionModule.php index 9d690129a..7c6d71a7c 100644 --- a/modules/ppcp-subscription/src/SubscriptionModule.php +++ b/modules/ppcp-subscription/src/SubscriptionModule.php @@ -160,7 +160,15 @@ class SubscriptionModule implements ModuleInterface { add_action( 'admin_enqueue_scripts', + /** + * Param types removed to avoid third-party issues. + * + * @psalm-suppress MissingClosureParamType + */ function( $hook ) use ( $c ) { + if ( ! is_string( $hook ) ) { + return; + } $settings = $c->get( 'wcgateway.settings' ); $subscription_mode = $settings->has( 'subscriptions_mode' ) ? $settings->get( 'subscriptions_mode' ) : ''; if ( $hook !== 'post.php' || $subscription_mode !== 'subscriptions_api' ) { @@ -183,7 +191,7 @@ class SubscriptionModule implements ModuleInterface { true ); - $plan = $product->get_meta( 'ppcp_subscription_plan' ) ?? null; + $plan = $product->get_meta( 'ppcp_subscription_plan' ) ?? array(); $plan_id = $plan['id'] ?? ''; wp_localize_script( 'ppcp-paypal-subscription',