From 1029fab60d2e899fcc772db35b0826ead8c66425 Mon Sep 17 00:00:00 2001 From: Rasmy Nguyen Date: Fri, 17 Jan 2025 17:34:08 -0500 Subject: [PATCH 1/4] fix(memberships): remove managed flag on cancel or expire --- .../class-woocommerce-membership-updated.php | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/includes/incoming-events/class-woocommerce-membership-updated.php b/includes/incoming-events/class-woocommerce-membership-updated.php index 25f31910..26ecb83c 100644 --- a/includes/incoming-events/class-woocommerce-membership-updated.php +++ b/includes/incoming-events/class-woocommerce-membership-updated.php @@ -99,7 +99,18 @@ public function update_membership() { return; } - $user_membership->update_status( $this->get_new_status() ); + $status = $this->get_new_status(); + $is_managed = get_post_meta( $user_membership->get_id(), Memberships_Admin::NETWORK_MANAGED_META_KEY, true ); + // If the membership is being cancelled or expired, remove the network managed flag. + if ( in_array( $status, [ 'cancelled', 'expired' ], true ) && $is_managed ) { + delete_post_meta( $user_membership->get_id(), Memberships_Admin::NETWORK_MANAGED_META_KEY ); + // Otherwise, if the membership is not managed, reset relevant meta. + } elseif ( ! $is_managed ) { + update_post_meta( $user_membership->get_id(), Memberships_Admin::NETWORK_MANAGED_META_KEY, true ); + update_post_meta( $user_membership->get_id(), Memberships_Admin::REMOTE_ID_META_KEY, $this->get_membership_id() ); + update_post_meta( $user_membership->get_id(), Memberships_Admin::SITE_URL_META_KEY, $this->get_site() ); + } + $user_membership->update_status( $status ); $user_membership->add_note( sprintf( // translators: %s is the site URL. From 8e8a92ebafb3c9dc03757fc93708e22519f96c5e Mon Sep 17 00:00:00 2001 From: Rasmy Nguyen Date: Mon, 20 Jan 2025 15:56:38 -0500 Subject: [PATCH 2/4] fix: add more comments and membership note --- .../class-woocommerce-membership-updated.php | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/includes/incoming-events/class-woocommerce-membership-updated.php b/includes/incoming-events/class-woocommerce-membership-updated.php index 26ecb83c..168ff60c 100644 --- a/includes/incoming-events/class-woocommerce-membership-updated.php +++ b/includes/incoming-events/class-woocommerce-membership-updated.php @@ -77,13 +77,13 @@ public function update_membership() { $user_membership = wc_memberships_get_user_membership( $user->ID, $local_plan_id ); if ( null === $user_membership ) { + // Create a new membership if it doesn't exist and link it to the remote membership. $user_membership = wc_memberships_create_user_membership( [ 'plan_id' => $local_plan_id, 'user_id' => $user->ID, ] ); - update_post_meta( $user_membership->get_id(), Memberships_Admin::NETWORK_MANAGED_META_KEY, true ); update_post_meta( $user_membership->get_id(), Memberships_Admin::REMOTE_ID_META_KEY, $this->get_membership_id() ); update_post_meta( $user_membership->get_id(), Memberships_Admin::SITE_URL_META_KEY, $this->get_site() ); @@ -101,11 +101,22 @@ public function update_membership() { $status = $this->get_new_status(); $is_managed = get_post_meta( $user_membership->get_id(), Memberships_Admin::NETWORK_MANAGED_META_KEY, true ); - // If the membership is being cancelled or expired, remove the network managed flag. if ( in_array( $status, [ 'cancelled', 'expired' ], true ) && $is_managed ) { + // If the membership is being cancelled or expired, and the membership is managed, we remove the managed meta fields. + // This is to allow the membership to be re-initiated from another site in the network. delete_post_meta( $user_membership->get_id(), Memberships_Admin::NETWORK_MANAGED_META_KEY ); - // Otherwise, if the membership is not managed, reset relevant meta. + delete_post_meta( $user_membership->get_id(), Memberships_Admin::REMOTE_ID_META_KEY ); + delete_post_meta( $user_membership->get_id(), Memberships_Admin::SITE_URL_META_KEY ); + $user_membership->add_note( + sprintf( + // translators: %s is the site URL. + __( 'Membership has been unlinked via Newspack Network. Unlinked from %s', 'newspack-network' ), + $this->get_site() + ) + ); + } elseif ( ! $is_managed ) { + // If the membership is not managed, it was previously unlinked so we reset the relevant meta fields. update_post_meta( $user_membership->get_id(), Memberships_Admin::NETWORK_MANAGED_META_KEY, true ); update_post_meta( $user_membership->get_id(), Memberships_Admin::REMOTE_ID_META_KEY, $this->get_membership_id() ); update_post_meta( $user_membership->get_id(), Memberships_Admin::SITE_URL_META_KEY, $this->get_site() ); From b0678ebd08c4685b06e11417cd93838bd64a9f5f Mon Sep 17 00:00:00 2001 From: Rasmy Nguyen Date: Mon, 20 Jan 2025 16:17:12 -0500 Subject: [PATCH 3/4] fix: remove redundant meta updates --- .../incoming-events/class-woocommerce-membership-updated.php | 3 --- 1 file changed, 3 deletions(-) diff --git a/includes/incoming-events/class-woocommerce-membership-updated.php b/includes/incoming-events/class-woocommerce-membership-updated.php index 168ff60c..4baeaec7 100644 --- a/includes/incoming-events/class-woocommerce-membership-updated.php +++ b/includes/incoming-events/class-woocommerce-membership-updated.php @@ -84,9 +84,6 @@ public function update_membership() { 'user_id' => $user->ID, ] ); - update_post_meta( $user_membership->get_id(), Memberships_Admin::NETWORK_MANAGED_META_KEY, true ); - update_post_meta( $user_membership->get_id(), Memberships_Admin::REMOTE_ID_META_KEY, $this->get_membership_id() ); - update_post_meta( $user_membership->get_id(), Memberships_Admin::SITE_URL_META_KEY, $this->get_site() ); } if ( is_wp_error( $user_membership ) ) { From 299a9ca153bfa95eedc376e71a0872bfa797fe01 Mon Sep 17 00:00:00 2001 From: Rasmy Nguyen Date: Mon, 20 Jan 2025 16:20:00 -0500 Subject: [PATCH 4/4] fix: update comment --- .../incoming-events/class-woocommerce-membership-updated.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/includes/incoming-events/class-woocommerce-membership-updated.php b/includes/incoming-events/class-woocommerce-membership-updated.php index 4baeaec7..37a680af 100644 --- a/includes/incoming-events/class-woocommerce-membership-updated.php +++ b/includes/incoming-events/class-woocommerce-membership-updated.php @@ -113,7 +113,7 @@ public function update_membership() { ); } elseif ( ! $is_managed ) { - // If the membership is not managed, it was previously unlinked so we reset the relevant meta fields. + // Otherwise, if the membership is not managed, reset the relevant meta fields. update_post_meta( $user_membership->get_id(), Memberships_Admin::NETWORK_MANAGED_META_KEY, true ); update_post_meta( $user_membership->get_id(), Memberships_Admin::REMOTE_ID_META_KEY, $this->get_membership_id() ); update_post_meta( $user_membership->get_id(), Memberships_Admin::SITE_URL_META_KEY, $this->get_site() );