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

Add/sync newsletters subscriptions #23

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 2 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
4 changes: 4 additions & 0 deletions includes/class-accepted-actions.php
Original file line number Diff line number Diff line change
Expand Up @@ -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',
];

/**
Expand All @@ -50,5 +52,7 @@ class Accepted_Actions {
'donation_new',
'donation_subscription_cancelled',
'network_user_updated',
'newsletter_subscribed',
'newsletter_updated',
];
}
6 changes: 2 additions & 4 deletions includes/incoming-events/class-donation-new.php
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?php
/**
* Newspack Hub Canonical Url Updated Incoming Event class
* Newspack Hub Donation New Incoming Event class
*
* @package Newspack
*/
Expand All @@ -12,9 +12,7 @@
use Newspack_Network\Utils\Users as User_Utils;

/**
* Class to handle the Canonical Url Updated Event
*
* This event is always sent from the Hub and received by Nodes.
* Class to handle the Donation New Event
*/
class Donation_New extends Abstract_Incoming_Event {

Expand Down
72 changes: 72 additions & 0 deletions includes/incoming-events/class-newsletter-subscribed.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
<?php
/**
* Newspack Hub Newsletter Subscribed Incoming Event class
*
* @package Newspack
*/

namespace Newspack_Network\Incoming_Events;

use Newspack_Network\Debugger;
use Newspack_Network\Utils\Users as User_Utils;

/**
* Class to handle the Newsletter Subscribed Event
*/
class Newsletter_Subscribed extends Abstract_Incoming_Event {

/**
* Processes the event
*
* @return void
*/
public function post_process_in_hub() {
$this->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 );
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Debugger::log( 'Processing newsleteter_subscribed with email: ' . $email );
Debugger::log( 'Processing newsletter_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 );
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
<?php
/**
* Newspack Hub Newsletter Subscription_Updated Incoming Event class
*
* @package Newspack
*/

namespace Newspack_Network\Incoming_Events;

use Newspack_Network\Debugger;
use Newspack_Network\Utils\Users as User_Utils;

/**
* Class to handle the Newsletter Subscription_Updated Event
*/
class Newsletter_Subscription_Updated extends Abstract_Incoming_Event {

/**
* Processes the event
*
* @return void
*/
public function post_process_in_hub() {
$this->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 );
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Debugger::log( 'Processing newsleteter_updated with email: ' . $email );
Debugger::log( 'Processing newsletter_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 );
}

}