diff --git a/includes/class-accepted-actions.php b/includes/class-accepted-actions.php index c7047527..2a39dbb2 100644 --- a/includes/class-accepted-actions.php +++ b/includes/class-accepted-actions.php @@ -35,6 +35,8 @@ class Accepted_Actions { 'donation_new' => 'Donation_New', 'donation_subscription_cancelled' => 'Donation_Subscription_Cancelled', 'network_user_updated' => 'User_Updated', + 'newsletter_subscribed' => 'Newsletter_Subscribed', + 'newsletter_updated' => 'Newsletter_Subscription_Updated', ]; /** @@ -50,5 +52,7 @@ class Accepted_Actions { 'donation_new', 'donation_subscription_cancelled', 'network_user_updated', + 'newsletter_subscribed', + 'newsletter_updated', ]; } diff --git a/includes/incoming-events/class-donation-new.php b/includes/incoming-events/class-donation-new.php index 999bd812..c684302a 100644 --- a/includes/incoming-events/class-donation-new.php +++ b/includes/incoming-events/class-donation-new.php @@ -1,6 +1,6 @@ process_subscription(); + } + + /** + * Process event in Node + * + * @return void + */ + public function process_in_node() { + $this->process_subscription(); + } + + /** + * Process process_subscription + * + * @return void + */ + public function process_subscription() { + $email = $this->get_email(); + Debugger::log( 'Processing newsleteter_subscribed with email: ' . $email ); + if ( ! $email ) { + return; + } + + $existing_user = User_Utils::get_or_create_user_by_email( $email, $this->get_site(), $this->data->user_id ?? '' ); + + if ( is_wp_error( $existing_user ) ) { + return; + } + + $node = $this->get_site(); + $network_newsletter_subscriber_data = \Newspack\Reader_Data::get_data( $existing_user->ID, 'network_newsletter_subscriber' ); + + if ( $network_newsletter_subscriber_data ) { + $network_newsletter_subscriber_data = json_decode( $network_newsletter_subscriber_data, true ); + } else { + $network_newsletter_subscriber_data = []; + } + if ( ! isset( $network_newsletter_subscriber_data[ $node ] ) ) { + $network_newsletter_subscriber_data[ $node ] = []; + } + $network_newsletter_subscriber_data[ $node ][ $this->get_timestamp() ] = [ + 'subscribed' => $this->get_data()->lists, + ]; + \Newspack\Reader_Data::update_item( $existing_user->ID, 'network_newsletter_subscriber', wp_json_encode( $network_newsletter_subscriber_data ) ); + Debugger::log( 'Updated ' . $email . ' network newsletter subscriber status with for node ' . $node ); + } + +} diff --git a/includes/incoming-events/class-newsletter-subscription-updated.php b/includes/incoming-events/class-newsletter-subscription-updated.php new file mode 100644 index 00000000..4af3c785 --- /dev/null +++ b/includes/incoming-events/class-newsletter-subscription-updated.php @@ -0,0 +1,73 @@ +process_subscription(); + } + + /** + * Process event in Node + * + * @return void + */ + public function process_in_node() { + $this->process_subscription(); + } + + /** + * Process process_subscription + * + * @return void + */ + public function process_subscription() { + $email = $this->get_email(); + Debugger::log( 'Processing newsleteter_updated with email: ' . $email ); + if ( ! $email ) { + return; + } + + $existing_user = User_Utils::get_or_create_user_by_email( $email, $this->get_site(), $this->data->user_id ?? '' ); + + if ( is_wp_error( $existing_user ) ) { + return; + } + + $node = $this->get_site(); + $network_newsletter_subscriber_data = \Newspack\Reader_Data::get_data( $existing_user->ID, 'network_newsletter_subscriber' ); + + if ( $network_newsletter_subscriber_data ) { + $network_newsletter_subscriber_data = json_decode( $network_newsletter_subscriber_data, true ); + } else { + $network_newsletter_subscriber_data = []; + } + if ( ! isset( $network_newsletter_subscriber_data[ $node ] ) ) { + $network_newsletter_subscriber_data[ $node ] = []; + } + $network_newsletter_subscriber_data[ $node ][ $this->get_timestamp() ] = [ + 'subscribed' => $this->get_data()->lists_added, + 'unsubscribed' => $this->get_data()->lists_removed, + ]; + \Newspack\Reader_Data::update_item( $existing_user->ID, 'network_newsletter_subscriber', wp_json_encode( $network_newsletter_subscriber_data ) ); + Debugger::log( 'Updated ' . $email . ' network newsletter subscriber status with for node ' . $node ); + } + +}