diff --git a/lib/Config/Migrator.php b/lib/Config/Migrator.php index 1398bf72f4..9f7c751143 100644 --- a/lib/Config/Migrator.php +++ b/lib/Config/Migrator.php @@ -221,6 +221,7 @@ class Migrator { 'count_processed mediumint(9) NOT NULL DEFAULT 0,', 'count_to_process mediumint(9) NOT NULL DEFAULT 0,', 'count_failed mediumint(9) NOT NULL DEFAULT 0,', + 'scheduled_at TIMESTAMP NOT NULL DEFAULT 0,', 'processed_at TIMESTAMP NOT NULL DEFAULT 0,', 'created_at TIMESTAMP NOT NULL DEFAULT 0,', 'updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,', diff --git a/lib/Models/Subscriber.php b/lib/Models/Subscriber.php index 19fe992de1..b1244d6ac8 100644 --- a/lib/Models/Subscriber.php +++ b/lib/Models/Subscriber.php @@ -1,6 +1,7 @@ save()) { $subscriber->addToSegments($segment_ids); + Scheduler::newSegmentSubscriptionNewsletter($subscriber, $segment_ids); } } diff --git a/lib/Newsletter/Scheduler/Scheduler.php b/lib/Newsletter/Scheduler/Scheduler.php new file mode 100644 index 0000000000..d8b67021c1 --- /dev/null +++ b/lib/Newsletter/Scheduler/Scheduler.php @@ -0,0 +1,71 @@ +filter('filterWithOptions') + ->findArray(); + } + + private static function scheduleWelcomeNewsletter($newsletter, $subscriber) { + $queue = SendingQueue::create(); + $queue->newsletter_id = $newsletter['id']; + $queue->subscribers = serialize( + array( + 'to_process' => array($subscriber['id']) + ) + ); + $queue->count_total = $queue->count_to_process = 1; + $after_time_type = $newsletter['afterTimeType']; + $after_time_number = $newsletter['afterTimeNumber']; + $scheduled_at = null; + switch($after_time_type) { + case 'hours': + $scheduled_at = Carbon::now() + ->addHours($after_time_number); + break; + case 'days': + $scheduled_at = Carbon::now() + ->addDays($after_time_number); + break; + case 'weeks': + $scheduled_at = Carbon::now() + ->addWeeks($after_time_number); + break; + } + if($scheduled_at) { + $queue->status = 'scheduled'; + $queue->scheduled_at = $scheduled_at; + } + $queue->save(); + } +} \ No newline at end of file diff --git a/lib/Segments/WP.php b/lib/Segments/WP.php index 63d409fccb..35cd8c1532 100644 --- a/lib/Segments/WP.php +++ b/lib/Segments/WP.php @@ -2,17 +2,15 @@ namespace MailPoet\Segments; use \MailPoet\Models\Subscriber; use \MailPoet\Models\Segment; +use MailPoet\Newsletter\Scheduler\Scheduler; class WP { static function synchronizeUser($wp_user_id) { - $wpUser = \get_userdata($wp_user_id); + $wp_user = \get_userdata($wp_user_id); $segment = Segment::getWPUsers(); - - if($wpUser === false or $segment === false) return; - - $subscriber = Subscriber::where('wp_user_id', $wpUser->ID) + if($wp_user === false or $segment === false) return; + $subscriber = Subscriber::where('wp_user_id', $wp_user->ID) ->findOne(); - switch(current_filter()) { case 'delete_user': case 'deleted_user': @@ -20,23 +18,22 @@ class WP { if($subscriber !== false && $subscriber->id()) { $subscriber->delete(); } - break; - + break; case 'user_register': + $new_user = (!$subscriber) ? true : false; case 'added_existing_user': case 'profile_update': default: // get first name & last name - $first_name = $wpUser->first_name; - $last_name = $wpUser->last_name; - if(empty($wpUser->first_name) && empty($wpUser->last_name)) { - $first_name = $wpUser->display_name; + $first_name = $wp_user->first_name; + $last_name = $wp_user->last_name; + if(empty($wp_user->first_name) && empty($wp_user->last_name)) { + $first_name = $wp_user->display_name; } - // subscriber data $data = array( - 'wp_user_id'=> $wpUser->ID, - 'email' => $wpUser->user_email, + 'wp_user_id' => $wp_user->ID, + 'email' => $wp_user->user_email, 'first_name' => $first_name, 'last_name' => $last_name, 'status' => 'subscribed' @@ -46,13 +43,18 @@ class WP { $data['id'] = $subscriber->id(); } $subscriber = Subscriber::createOrUpdate($data); - if($subscriber->getErrors() === false && $subscriber->id > 0) { if($segment !== false) { $segment->addSubscriber($subscriber->id); } + if(isset($new_user) && $new_user === true) { + Scheduler::newUserRegistrationNewsletter( + $subscriber->asArray(), + (array) $wp_user + ); + } } - break; + break; } }