Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(network-pass): handle multiple sync'd membership plans #80

Closed
wants to merge 1 commit into from
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
83 changes: 43 additions & 40 deletions includes/incoming-events/class-woocommerce-membership-updated.php
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ public function update_membership() {

global $wpdb;

$local_plan_id = $wpdb->get_var( // phpcs:ignore
$local_plan_ids_query_results = $wpdb->get_results( // phpcs:ignore
$wpdb->prepare(
"SELECT post_id from $wpdb->postmeta WHERE meta_key = %s AND meta_value = %s AND post_id IN ( SELECT ID FROM $wpdb->posts WHERE post_type = %s ) ",
Memberships_Admin::NETWORK_ID_META_KEY,
Expand All @@ -64,51 +64,54 @@ public function update_membership() {
)
);

if ( ! $local_plan_id ) {
Debugger::log( 'Local plan not found' );
if ( ! $local_plan_ids_query_results ) {
Debugger::log( 'No local plans found' );
return;
}

Memberships_Events::$pause_events = true;
User_Update_Watcher::$enabled = false;

$user = User_Utils::get_or_create_user_by_email( $email, $this->get_site(), $this->data->user_id ?? '' );

$user_membership = wc_memberships_get_user_membership( $user->ID, $local_plan_id );

if ( null === $user_membership ) {
$user_membership = wc_memberships_create_user_membership(
[
'plan_id' => $local_plan_id,
'user_id' => $user->ID,
]
foreach ( $local_plan_ids_query_results as $local_plan_id_query_result ) {
$local_plan_id = $local_plan_id_query_result->post_id;
Memberships_Events::$pause_events = true;
User_Update_Watcher::$enabled = false;

$user = User_Utils::get_or_create_user_by_email( $email, $this->get_site(), $this->data->user_id ?? '' );

$user_membership = wc_memberships_get_user_membership( $user->ID, $local_plan_id );

if ( null === $user_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() );
}

if ( is_wp_error( $user_membership ) ) {
Debugger::log( 'Error creating membership plan: ' . $user_membership->get_error_message() );
return;
}

if ( ! $user_membership instanceof WC_Memberships_User_Membership ) {
Debugger::log( 'Error creating membership plan' );
return;
}

$user_membership->update_status( $this->get_new_status() );
$user_membership->add_note(
sprintf(
// translators: %s is the site URL.
__( 'Membership status updated via Newspack Network. Status propagated from %s', 'newspack-network' ),
$this->get_site()
)
);

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() );
Debugger::log( 'User membership updated' );
}

if ( is_wp_error( $user_membership ) ) {
Debugger::log( 'Error creating membership plan: ' . $user_membership->get_error_message() );
return;
}

if ( ! $user_membership instanceof WC_Memberships_User_Membership ) {
Debugger::log( 'Error creating membership plan' );
return;
}

$user_membership->update_status( $this->get_new_status() );
$user_membership->add_note(
sprintf(
// translators: %s is the site URL.
__( 'Membership status updated via Newspack Network. Status propagated from %s', 'newspack-network' ),
$this->get_site()
)
);

Debugger::log( 'User membership updated' );
}

/**
Expand Down