Skip to content
Merged
Show file tree
Hide file tree
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
1 change: 1 addition & 0 deletions includes/data-events/connectors/class-activecampaign.php
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ public static function register_handlers() {
Data_Events::register_handler( [ __CLASS__, 'newsletter_updated' ], 'newsletter_subscribed' );
Data_Events::register_handler( [ __CLASS__, 'newsletter_updated' ], 'newsletter_updated' );
Data_Events::register_handler( [ __CLASS__, 'network_new_reader' ], 'network_new_reader' );
Data_Events::register_handler( [ __CLASS__, 'membership_saved' ], 'membership_saved' );
}
}

Expand Down
29 changes: 29 additions & 0 deletions includes/data-events/connectors/class-connector.php
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,35 @@ public static function order_completed( $timestamp, $data, $client_id ) {
static::put( $contact, 'RAS Order completed' );
}

/**
* Handle membership creation or update.
*
* @param int $timestamp Timestamp of the event.
* @param array $data Data associated with the event.
* @param int $client_id ID of the client that triggered the event.
*/
public static function membership_saved( $timestamp, $data, $client_id ) {
$filtered_enabled_fields = Newspack_Newsletters::filter_enabled_fields(
[
'membership_status',
'membership_plan',
'membership_start_date',
'membership_end_date',
]
);
if ( empty( $filtered_enabled_fields ) ) {
return;
}
$contact = [ 'email' => $data['email'] ];
foreach ( $filtered_enabled_fields as $key => $value ) {
if ( isset( $data[ $key ] ) ) {
$contact['metadata'][ Newspack_Newsletters::get_metadata_key( $key ) ] = $data[ $key ];
}
}

static::put( $contact, 'RAS Woo Membership created or updated.' );
}

/**
* Handle a change in subscription status.
*
Expand Down
1 change: 1 addition & 0 deletions includes/data-events/connectors/class-mailchimp.php
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ public static function register_handlers() {
Data_Events::register_handler( [ __CLASS__, 'subscription_updated' ], 'donation_subscription_changed' );
Data_Events::register_handler( [ __CLASS__, 'subscription_updated' ], 'product_subscription_changed' );
Data_Events::register_handler( [ __CLASS__, 'network_new_reader' ], 'network_new_reader' );
Data_Events::register_handler( [ __CLASS__, 'membership_saved' ], 'membership_saved' );
}
}

Expand Down
24 changes: 24 additions & 0 deletions includes/data-events/listeners.php
Original file line number Diff line number Diff line change
Expand Up @@ -340,3 +340,27 @@ function( $membership, $old_status, $new_status ) {
];
}
);

/**
* When a membership is created or updated.
*/
Data_Events::register_listener(
'wc_memberships_user_membership_saved',
'membership_saved',
function( $membership_plan, $args ) {
if ( ! $membership_plan ) {
return;
}
$membership = \wc_memberships_get_user_membership( $args['user_membership_id'] );
$user = \get_user_by( 'id', $args['user_id'] );
$user_email = $user ? $user->user_email : '';
return [
'user_id' => $args['user_id'],
'email' => $user_email,
'membership_plan' => $membership_plan->get_name(),
'membership_status' => $membership->get_status(),
'membership_start_date' => $membership->get_start_date(),
'membership_end_date' => $membership->get_end_date(),
];
}
);
34 changes: 22 additions & 12 deletions includes/plugins/class-newspack-newsletters.php
Original file line number Diff line number Diff line change
Expand Up @@ -77,18 +77,28 @@ public static function get_basic_metadata_fields() {
*/
public static function get_payment_metadata_fields() {
return [
'membership_status' => 'Membership Status',
'payment_page' => 'Payment Page',
'payment_page_utm' => 'Payment UTM: ',
'sub_start_date' => 'Current Subscription Start Date',
'sub_end_date' => 'Current Subscription End Date',
'billing_cycle' => 'Billing Cycle',
'recurring_payment' => 'Recurring Payment',
'last_payment_date' => 'Last Payment Date',
'last_payment_amount' => 'Last Payment Amount',
'product_name' => 'Product Name',
'next_payment_date' => 'Next Payment Date',
'total_paid' => 'Total Paid',
'membership_status' => 'Membership Status',
'membership_plan' => 'Membership Plan',
// In most cases these fields won't be needed, because their values will match
// linked subscription dates. But some setups use memberships w/out subscriptions.
'membership_start_date' => 'Current Membership Start Date',
'membership_end_date' => 'Current Membership End Date',
// URL of the page on which the payment has happened.
'payment_page' => 'Payment Page',
'payment_page_utm' => 'Payment UTM: ',
'sub_start_date' => 'Current Subscription Start Date',
'sub_end_date' => 'Current Subscription End Date',
// At what interval does the recurring payment occur – e.g. day, week, month or year.
'billing_cycle' => 'Billing Cycle',
// The total value of the recurring payment.
'recurring_payment' => 'Recurring Payment',
'last_payment_date' => 'Last Payment Date',
'last_payment_amount' => 'Last Payment Amount',
// Product name, as it appears in WooCommerce.
'product_name' => 'Product Name',
'next_payment_date' => 'Next Payment Date',
// Total value spent by this customer on the site.
'total_paid' => 'Total Paid',
];
}

Expand Down