Fixes issue where expired and expiring notice displayed incorrectly (#49717)
Fixes issue where expired and expiring notice displayed incorrectly Consider connected (to the current site) product when checking expired and expiring notice. * Cache site subscriptions instead of just site_id * Add helper method get_installed_subscriptions * Bail out of installed subscriptions are empty * Return early for invalid site ID
This commit is contained in:
parent
7f23702018
commit
5fdc8fa520
|
@ -0,0 +1,5 @@
|
||||||
|
Significance: patch
|
||||||
|
Type: fix
|
||||||
|
|
||||||
|
Display admin notice of expired and expiring Woo subscription when the product
|
||||||
|
is connected / activated on the site.
|
|
@ -254,26 +254,36 @@ class WC_Helper_Updater {
|
||||||
* @return void.
|
* @return void.
|
||||||
*/
|
*/
|
||||||
public static function display_notice_for_expired_and_expiring_subscriptions( $plugin_data, $response ) {
|
public static function display_notice_for_expired_and_expiring_subscriptions( $plugin_data, $response ) {
|
||||||
|
|
||||||
// Extract product ID from the response.
|
// Extract product ID from the response.
|
||||||
$product_id = preg_replace( '/[^0-9]/', '', $response->id );
|
$product_id = preg_replace( '/[^0-9]/', '', $response->id );
|
||||||
|
|
||||||
// Get the subscription details based on product ID.
|
// Product subscriptions.
|
||||||
$subscription = current(
|
$subscriptions = wp_list_filter( WC_Helper::get_installed_subscriptions(), array( 'product_id' => $product_id ) );
|
||||||
wp_list_filter(
|
if ( empty( $subscriptions ) ) {
|
||||||
WC_Helper::get_subscriptions(),
|
|
||||||
array( 'product_id' => $product_id )
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
// Check if subscription is empty.
|
|
||||||
if ( empty( $subscription ) ) {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$expired_subscription = current(
|
||||||
|
array_filter(
|
||||||
|
$subscriptions,
|
||||||
|
function ( $subscription ) {
|
||||||
|
return ! empty( $subscription['expired'] ) && ! $subscription['lifetime'];
|
||||||
|
}
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
$expiring_subscription = current(
|
||||||
|
array_filter(
|
||||||
|
$subscriptions,
|
||||||
|
function ( $subscription ) {
|
||||||
|
return ! empty( $subscription['expiring'] ) && ! $subscription['autorenew'];
|
||||||
|
}
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
// Prepare the expiry notice based on subscription status.
|
// Prepare the expiry notice based on subscription status.
|
||||||
$expiry_notice = '';
|
$expiry_notice = '';
|
||||||
if ( ! empty( $subscription['expired'] ) && ! $subscription['lifetime'] ) {
|
if ( ! empty( $expired_subscription ) ) {
|
||||||
|
|
||||||
$renew_link = add_query_arg(
|
$renew_link = add_query_arg(
|
||||||
array(
|
array(
|
||||||
|
@ -284,7 +294,7 @@ class WC_Helper_Updater {
|
||||||
);
|
);
|
||||||
|
|
||||||
/* translators: 1: Product regular price */
|
/* translators: 1: Product regular price */
|
||||||
$product_price = ! empty( $subscription['product_regular_price'] ) ? sprintf( __( 'for %s ', 'woocommerce' ), esc_html( $subscription['product_regular_price'] ) ) : '';
|
$product_price = ! empty( $expired_subscription['product_regular_price'] ) ? sprintf( __( 'for %s ', 'woocommerce' ), esc_html( $expired_subscription['product_regular_price'] ) ) : '';
|
||||||
|
|
||||||
$expiry_notice = sprintf(
|
$expiry_notice = sprintf(
|
||||||
/* translators: 1: URL to My Subscriptions page 2: Product price */
|
/* translators: 1: URL to My Subscriptions page 2: Product price */
|
||||||
|
@ -292,18 +302,19 @@ class WC_Helper_Updater {
|
||||||
esc_url( $renew_link ),
|
esc_url( $renew_link ),
|
||||||
$product_price
|
$product_price
|
||||||
);
|
);
|
||||||
} elseif ( ! empty( $subscription['expiring'] ) && ! $subscription['autorenew'] ) {
|
} elseif ( ! empty( $expiring_subscription ) ) {
|
||||||
$renew_link = add_query_arg(
|
$renew_link = add_query_arg(
|
||||||
array(
|
array(
|
||||||
'utm_source' => 'pu',
|
'utm_source' => 'pu',
|
||||||
'utm_campaign' => 'pu_plugin_screen_enable_autorenew',
|
'utm_campaign' => 'pu_plugin_screen_enable_autorenew',
|
||||||
),
|
),
|
||||||
PluginsHelper::WOO_SUBSCRIPTION_PAGE_URL
|
PluginsHelper::WOO_SUBSCRIPTION_PAGE_URL
|
||||||
);
|
);
|
||||||
|
|
||||||
$expiry_notice = sprintf(
|
$expiry_notice = sprintf(
|
||||||
/* translators: 1: Expiry date 1: URL to My Subscriptions page */
|
/* translators: 1: Expiry date 1: URL to My Subscriptions page */
|
||||||
__( ' Your subscription expires on %1$s, <a href="%2$s" class="woocommerce-enable-autorenew">enable auto-renew</a> to continue receiving updates.', 'woocommerce' ),
|
__( ' Your subscription expires on %1$s, <a href="%2$s" class="woocommerce-enable-autorenew">enable auto-renew</a> to continue receiving updates.', 'woocommerce' ),
|
||||||
date_i18n( 'F jS', $subscription['expires'] ),
|
date_i18n( 'F jS', $expiring_subscription['expires'] ),
|
||||||
esc_url( $renew_link )
|
esc_url( $renew_link )
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1297,6 +1297,35 @@ class WC_Helper {
|
||||||
return ! empty( $subscription );
|
return ! empty( $subscription );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the user's connected subscriptions that are installed on the current
|
||||||
|
* site.
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public static function get_installed_subscriptions() {
|
||||||
|
static $installed_subscriptions = null;
|
||||||
|
|
||||||
|
// Cache installed_subscriptions in the current request.
|
||||||
|
if ( is_null( $installed_subscriptions ) ) {
|
||||||
|
$auth = WC_Helper_Options::get( 'auth' );
|
||||||
|
$site_id = isset( $auth['site_id'] ) ? absint( $auth['site_id'] ) : 0;
|
||||||
|
if ( 0 === $site_id ) {
|
||||||
|
$installed_subscriptions = array();
|
||||||
|
return $installed_subscriptions;
|
||||||
|
}
|
||||||
|
|
||||||
|
$installed_subscriptions = array_filter(
|
||||||
|
self::get_subscriptions(),
|
||||||
|
function ( $subscription ) use ( $site_id ) {
|
||||||
|
return in_array( $site_id, $subscription['connections'], true );
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $installed_subscriptions;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get subscription state of a given product ID.
|
* Get subscription state of a given product ID.
|
||||||
*
|
*
|
||||||
|
|
|
@ -827,6 +827,7 @@ class PluginsHelper {
|
||||||
$subscriptions,
|
$subscriptions,
|
||||||
function ( $sub ) {
|
function ( $sub ) {
|
||||||
return ( ! empty( $sub['local']['installed'] ) && ! empty( $sub['product_key'] ) )
|
return ( ! empty( $sub['local']['installed'] ) && ! empty( $sub['product_key'] ) )
|
||||||
|
&& $sub['active']
|
||||||
&& $sub['expiring']
|
&& $sub['expiring']
|
||||||
&& ! $sub['autorenew'];
|
&& ! $sub['autorenew'];
|
||||||
},
|
},
|
||||||
|
@ -898,6 +899,7 @@ class PluginsHelper {
|
||||||
$subscriptions,
|
$subscriptions,
|
||||||
function ( $sub ) {
|
function ( $sub ) {
|
||||||
return ( ! empty( $sub['local']['installed'] ) && ! empty( $sub['product_key'] ) )
|
return ( ! empty( $sub['local']['installed'] ) && ! empty( $sub['product_key'] ) )
|
||||||
|
&& $sub['active']
|
||||||
&& $sub['expired']
|
&& $sub['expired']
|
||||||
&& ! $sub['lifetime'];
|
&& ! $sub['lifetime'];
|
||||||
},
|
},
|
||||||
|
|
Loading…
Reference in New Issue