- Fixes scheduling issues
- Fixes unit test - Updates as per code review comments
This commit is contained in:
@ -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',
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
@ -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
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user