- Fixes scheduling issues

- Fixes unit test
- Updates as per code review comments
This commit is contained in:
Vlad
2016-03-18 12:11:38 -04:00
parent bb9fce7f82
commit 17b56f0160
4 changed files with 26 additions and 29 deletions

View File

@ -180,11 +180,7 @@ class Populator {
'newsletter_type' => 'notification', 'newsletter_type' => 'notification',
), ),
array( array(
'name' => 'lastRunTime', 'name' => 'lastSentData',
'newsletter_type' => 'notification',
),
array(
'name' => 'lastRunResults',
'newsletter_type' => 'notification', 'newsletter_type' => 'notification',
), ),
); );

View File

@ -209,7 +209,7 @@ class Subscriber extends Model {
if($subscriber->save()) { if($subscriber->save()) {
$subscriber->addToSegments($segment_ids); $subscriber->addToSegments($segment_ids);
Scheduler::welcomeForSegmentSubscription($subscriber, $segment_ids); Scheduler::welcomeForSegmentSubscription($subscriber->id, $segment_ids);
} }
} }

View File

@ -8,16 +8,20 @@ use MailPoet\Models\NewsletterOptionField;
use MailPoet\Models\SendingQueue; use MailPoet\Models\SendingQueue;
class Scheduler { class Scheduler {
const seconds_in_hour = 3600;
const last_weekday_format = 'L';
static function postNotification($newsletter_id) { static function postNotification($newsletter_id) {
$newsletter = Newsletter::filter('filterWithOptions') $newsletter = Newsletter::filter('filterWithOptions')
->findOne($newsletter_id); ->findOne($newsletter_id)
$interval_type = $newsletter->intervalType; ->asArray();
$hour = (int) $newsletter->timeOfDay / 3600; $interval_type = $newsletter['intervalType'];
$week_day = $newsletter->weekDay; $hour = (int) $newsletter['timeOfDay'] / self::seconds_in_hour;
$month_day = $newsletter->monthDay; $week_day = $newsletter['weekDay'];
$nth_week_day = ($newsletter->nthWeekDay === 'L') ? $month_day = $newsletter['monthDay'];
$newsletter->nthWeekDay : $nth_week_day = ($newsletter['nthWeekDay'] === self::last_weekday_format) ?
'#' . $newsletter->nthWeekDay; $newsletter['nthWeekDay'] :
'#' . $newsletter['nthWeekDay'];
switch($interval_type) { switch($interval_type) {
case 'immediately': case 'immediately':
$cron = '* * * * *'; $cron = '* * * * *';
@ -36,38 +40,35 @@ class Scheduler {
break; break;
} }
$option_field = NewsletterOptionField::where('name', 'schedule') $option_field = NewsletterOptionField::where('name', 'schedule')
->findOne(); ->findOne()
->asArray();
$relation = NewsletterOption::create(); $relation = NewsletterOption::create();
$relation->newsletter_id = $newsletter->id; $relation->newsletter_id = $newsletter['id'];
$relation->option_field_id = $option_field->id; $relation->option_field_id = $option_field['id'];
$relation->value = $cron; $relation->value = $cron;
$relation->save(); $relation->save();
} }
static function welcomeForSegmentSubscription( static function welcomeForSegmentSubscription($subscriber_id, array $segments) {
array $subscriber, array $segments
) {
$newsletters = self::getWelcomeNewsletters(); $newsletters = self::getWelcomeNewsletters();
if(!count($newsletters)) return; if(!count($newsletters)) return;
foreach($newsletters as $newsletter) { foreach($newsletters as $newsletter) {
if($newsletter['event'] === 'segment' && if($newsletter['event'] === 'segment' &&
in_array($newsletter['segment'], $segments) in_array($newsletter['segment'], $segments)
) { ) {
self::createSendingQueueEntry($newsletter, $subscriber); self::createSendingQueueEntry($newsletter, $subscriber_id);
} }
} }
} }
static function welcomeForNewWordpressUserRegistration( static function welcomeForNewWPUser($subscriber_id, array $wp_user) {
array $subscriber, array $wp_user
) {
$newsletters = self::getWelcomeNewsletters(); $newsletters = self::getWelcomeNewsletters();
if(!count($newsletters)) return; if(!count($newsletters)) return;
foreach($newsletters as $newsletter) { foreach($newsletters as $newsletter) {
if($newsletter['event'] === 'user' && if($newsletter['event'] === 'user' &&
in_array($newsletter['role'], $wp_user['roles']) in_array($newsletter['role'], $wp_user['roles'])
) { ) {
self::createSendingQueueEntry($newsletter, $subscriber); self::createSendingQueueEntry($newsletter, $subscriber_id);
} }
} }
} }
@ -78,12 +79,12 @@ class Scheduler {
->findArray(); ->findArray();
} }
private static function createSendingQueueEntry($newsletter, $subscriber) { private static function createSendingQueueEntry($newsletter, $subscriber_id) {
$queue = SendingQueue::create(); $queue = SendingQueue::create();
$queue->newsletter_id = $newsletter['id']; $queue->newsletter_id = $newsletter['id'];
$queue->subscribers = serialize( $queue->subscribers = serialize(
array( array(
'to_process' => array($subscriber['id']) 'to_process' => array($subscriber_id)
) )
); );
$queue->count_total = $queue->count_to_process = 1; $queue->count_total = $queue->count_to_process = 1;

View File

@ -48,8 +48,8 @@ class WP {
$segment->addSubscriber($subscriber->id); $segment->addSubscriber($subscriber->id);
} }
if(isset($new_user) && $new_user === true) { if(isset($new_user) && $new_user === true) {
Scheduler::welcomeForNewWordpressUserRegistration( Scheduler::welcomeForNewWPUser(
$subscriber->asArray(), $subscriber->id,
(array) $wp_user (array) $wp_user
); );
} }