- Implements post notification scheduling
This commit is contained in:
@ -53,13 +53,13 @@ define(
|
||||
var weekDayField = {
|
||||
name: 'weekDay',
|
||||
values: {
|
||||
0: 'Monday',
|
||||
1: 'Tuesday',
|
||||
2: 'Wednesday',
|
||||
3: 'Thursday',
|
||||
4: 'Friday',
|
||||
5: 'Saturday',
|
||||
6: 'Sunday',
|
||||
0: 'Sunday',
|
||||
1: 'Monday',
|
||||
2: 'Tuesday',
|
||||
3: 'Wednesday',
|
||||
4: 'Thursday',
|
||||
5: 'Friday',
|
||||
6: 'Saturday'
|
||||
},
|
||||
};
|
||||
|
||||
@ -84,10 +84,10 @@ define(
|
||||
var nthWeekDayField = {
|
||||
name: 'nthWeekDay',
|
||||
values: {
|
||||
'0': '1st',
|
||||
'1': '2nd',
|
||||
'2': '3rd',
|
||||
'3': 'last',
|
||||
'1': '1st',
|
||||
'2': '2nd',
|
||||
'3': '3rd',
|
||||
'L': 'last',
|
||||
},
|
||||
};
|
||||
|
||||
@ -99,9 +99,9 @@ define(
|
||||
return {
|
||||
intervalType: 'immediate', // 'immediate'|'daily'|'weekly'|'monthly'
|
||||
timeOfDay: 0,
|
||||
weekDay: 0,
|
||||
weekDay: 1,
|
||||
monthDay: 0,
|
||||
nthWeekDay: 0,
|
||||
nthWeekDay: 1,
|
||||
};
|
||||
},
|
||||
handleIntervalChange: function(event) {
|
||||
|
6
composer.lock
generated
6
composer.lock
generated
@ -2294,7 +2294,7 @@
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/config/zipball/41ee6c70758f40fa1dbf90d019ae0a66c4a09e74",
|
||||
"url": "https://api.github.com/repos/symfony/config/zipball/ee4cdda66aff834c8125e8f2c15932461667c521",
|
||||
"reference": "41ee6c70758f40fa1dbf90d019ae0a66c4a09e74",
|
||||
"shasum": ""
|
||||
},
|
||||
@ -2671,7 +2671,7 @@
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/form/zipball/7fd5e4034cb8e215887136f5e176430bbf5ef085",
|
||||
"url": "https://api.github.com/repos/symfony/form/zipball/b629051c77a4f37c625651d03002760385df4575",
|
||||
"reference": "7fd5e4034cb8e215887136f5e176430bbf5ef085",
|
||||
"shasum": ""
|
||||
},
|
||||
@ -2929,7 +2929,7 @@
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/process/zipball/6f1979c3b0f4c22c77a8a8971afaa7dd07f082ac",
|
||||
"url": "https://api.github.com/repos/symfony/process/zipball/d9d21cfcc3e202ee34777d6da38897695d4d208d",
|
||||
"reference": "6f1979c3b0f4c22c77a8a8971afaa7dd07f082ac",
|
||||
"shasum": ""
|
||||
},
|
||||
|
@ -175,6 +175,18 @@ class Populator {
|
||||
'name' => 'nthWeekDay',
|
||||
'newsletter_type' => 'notification',
|
||||
),
|
||||
array(
|
||||
'name' => 'schedule',
|
||||
'newsletter_type' => 'notification',
|
||||
),
|
||||
array(
|
||||
'name' => 'lastRunTime',
|
||||
'newsletter_type' => 'notification',
|
||||
),
|
||||
array(
|
||||
'name' => 'lastRunResults',
|
||||
'newsletter_type' => 'notification',
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -209,7 +209,7 @@ class Subscriber extends Model {
|
||||
|
||||
if($subscriber->save()) {
|
||||
$subscriber->addToSegments($segment_ids);
|
||||
Scheduler::newSegmentSubscriptionNewsletter($subscriber, $segment_ids);
|
||||
Scheduler::welcomeForSegmentSubscription($subscriber, $segment_ids);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3,29 +3,71 @@ namespace MailPoet\Newsletter\Scheduler;
|
||||
|
||||
use Carbon\Carbon;
|
||||
use MailPoet\Models\Newsletter;
|
||||
use MailPoet\Models\NewsletterOption;
|
||||
use MailPoet\Models\NewsletterOptionField;
|
||||
use MailPoet\Models\SendingQueue;
|
||||
|
||||
class Scheduler {
|
||||
static function newSegmentSubscriptionNewsletter(array $subscriber, array $segments) {
|
||||
static function postNotification($newsletter_id) {
|
||||
$newsletter = Newsletter::filter('filterWithOptions')
|
||||
->findOne($newsletter_id);
|
||||
$interval_type = $newsletter->intervalType;
|
||||
$hour = (int) $newsletter->timeOfDay / 3600;
|
||||
$week_day = $newsletter->weekDay;
|
||||
$month_day = $newsletter->monthDay;
|
||||
$nth_week_day = ($newsletter->nthWeekDay === 'L') ?
|
||||
$newsletter->nthWeekDay :
|
||||
'#' . $newsletter->nthWeekDay;
|
||||
switch($interval_type) {
|
||||
case 'immediately':
|
||||
$cron = '* * * * *';
|
||||
break;
|
||||
case 'immediate': //daily
|
||||
$cron = sprintf('0 %s * * *', $hour);
|
||||
break;
|
||||
case 'weekly':
|
||||
$cron = sprintf('0 %s * * %s', $hour, $week_day);
|
||||
break;
|
||||
case 'monthly':
|
||||
$cron = sprintf('0 %s %s * *', $hour, $month_day);
|
||||
break;
|
||||
case 'nthWeekDay':
|
||||
$cron = sprintf('0 %s ? * %s%s', $hour, $week_day, $nth_week_day);
|
||||
break;
|
||||
}
|
||||
$option_field = NewsletterOptionField::where('name', 'schedule')
|
||||
->findOne();
|
||||
$relation = NewsletterOption::create();
|
||||
$relation->newsletter_id = $newsletter->id;
|
||||
$relation->option_field_id = $option_field->id;
|
||||
$relation->value = $cron;
|
||||
$relation->save();
|
||||
}
|
||||
|
||||
static function welcomeForSegmentSubscription(
|
||||
array $subscriber, array $segments
|
||||
) {
|
||||
$newsletters = self::getWelcomeNewsletters();
|
||||
if(!count($newsletters)) return;
|
||||
foreach($newsletters as $newsletter) {
|
||||
if($newsletter['event'] === 'segment' &&
|
||||
in_array($newsletter['segment'], $segments)
|
||||
) {
|
||||
self::scheduleWelcomeNewsletter($newsletter, $subscriber);
|
||||
self::createSendingQueueEntry($newsletter, $subscriber);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static function newUserRegistrationNewsletter(array $subscriber, array $wp_user) {
|
||||
static function welcomeForNewWordpressUserRegistration(
|
||||
array $subscriber, array $wp_user
|
||||
) {
|
||||
$newsletters = self::getWelcomeNewsletters();
|
||||
if(!count($newsletters)) return;
|
||||
foreach($newsletters as $newsletter) {
|
||||
if($newsletter['event'] === 'user' &&
|
||||
in_array($newsletter['role'], $wp_user['roles'])
|
||||
) {
|
||||
self::scheduleWelcomeNewsletter($newsletter, $subscriber);
|
||||
self::createSendingQueueEntry($newsletter, $subscriber);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -36,7 +78,7 @@ class Scheduler {
|
||||
->findArray();
|
||||
}
|
||||
|
||||
private static function scheduleWelcomeNewsletter($newsletter, $subscriber) {
|
||||
private static function createSendingQueueEntry($newsletter, $subscriber) {
|
||||
$queue = SendingQueue::create();
|
||||
$queue->newsletter_id = $newsletter['id'];
|
||||
$queue->subscribers = serialize(
|
||||
|
@ -14,6 +14,7 @@ use MailPoet\Models\NewsletterOptionField;
|
||||
use MailPoet\Models\NewsletterOption;
|
||||
use MailPoet\Newsletter\Renderer\Renderer;
|
||||
use MailPoet\Models\SendingQueue;
|
||||
use MailPoet\Newsletter\Scheduler\Scheduler;
|
||||
|
||||
if(!defined('ABSPATH')) exit;
|
||||
|
||||
@ -265,6 +266,12 @@ class Newsletters {
|
||||
}
|
||||
}
|
||||
}
|
||||
if(!isset($data['id']) &&
|
||||
isset($data['type']) &&
|
||||
$data['type'] === 'notification'
|
||||
) {
|
||||
Scheduler::postNotification($newsletter->id);
|
||||
}
|
||||
return array(
|
||||
'result' => true,
|
||||
'newsletter' => $newsletter->asArray()
|
||||
|
@ -48,7 +48,7 @@ class WP {
|
||||
$segment->addSubscriber($subscriber->id);
|
||||
}
|
||||
if(isset($new_user) && $new_user === true) {
|
||||
Scheduler::newUserRegistrationNewsletter(
|
||||
Scheduler::welcomeForNewWordpressUserRegistration(
|
||||
$subscriber->asArray(),
|
||||
(array) $wp_user
|
||||
);
|
||||
|
Reference in New Issue
Block a user