Adds newsletter/cron scheduler for automatic emails

This commit is contained in:
Vlad
2018-04-29 20:10:13 -04:00
parent 116ee51497
commit b75d4db412
2 changed files with 68 additions and 23 deletions

View File

@@ -47,6 +47,16 @@ class Scheduler {
}
}
static function scheduleAutomaticEmail($group, $event, $scheduling_condition = false, $subscriber_id = false, $meta = false) {
$newsletters = self::getNewsletters(Newsletter::TYPE_AUTOMATIC, $group);
if(empty($newsletters)) return false;
foreach($newsletters as $newsletter) {
if($newsletter->event !== $event) continue;
if(is_callable($scheduling_condition) && !$scheduling_condition($newsletter)) continue;
self::createAutomaticEmailQueue($newsletter, $subscriber_id, $meta);
}
}
static function scheduleWPUserWelcomeNotification(
$subscriber_id,
$wp_user,
@@ -84,26 +94,30 @@ class Scheduler {
$queue = SendingTask::create();
$queue->newsletter_id = $newsletter->id;
$queue->setSubscribers(array($subscriber_id));
$after_time_type = $newsletter->afterTimeType;
$after_time_number = $newsletter->afterTimeNumber;
$scheduled_at = null;
$current_time = Carbon::createFromTimestamp(WPFunctions::currentTime('timestamp'));
switch($after_time_type) {
case 'hours':
$scheduled_at = $current_time->addHours($after_time_number);
break;
case 'days':
$scheduled_at = $current_time->addDays($after_time_number);
break;
case 'weeks':
$scheduled_at = $current_time->addWeeks($after_time_number);
break;
default:
$scheduled_at = $current_time;
}
$queue->status = SendingQueue::STATUS_SCHEDULED;
$queue->priority = SendingQueue::PRIORITY_HIGH;
$queue->scheduled_at = $scheduled_at;
$queue->scheduled_at = self::getScheduledTimeForWelcomeOrAutomaticEmails(
$newsletter->afterTimeType,
$newsletter->afterTimeNumber
);
return $queue->save();
}
static function createAutomaticEmailQueue($newsletter, $subscriber_id, $meta) {
$queue = SendingTask::create();
$queue->newsletter_id = $newsletter->id;
if($newsletter->sendTo === 'user' && $subscriber_id) {
$queue->setSubscribers(array($subscriber_id));
}
if($meta) {
$queue->__set('meta', $meta);
}
$queue->status = SendingQueue::STATUS_SCHEDULED;
$queue->priority = SendingQueue::PRIORITY_MEDIUM;
$queue->scheduled_at = self::getScheduledTimeForWelcomeNotificationOrAutomaticEmails(
$newsletter->afterTimeType,
$newsletter->afterTimeNumber
);
return $queue->save();
}
@@ -195,9 +209,9 @@ class Scheduler {
return $previous_run_date;
}
static function getNewsletters($type) {
static function getNewsletters($type, $group = false) {
return Newsletter::getPublished()
->filter('filterType', $type)
->filter('filterType', $type, $group)
->filter('filterStatus', Newsletter::STATUS_ACTIVE)
->filter('filterWithOptions')
->findMany();
@@ -206,4 +220,18 @@ class Scheduler {
static function formatDatetimeString($datetime_string) {
return Carbon::parse($datetime_string)->format('Y-m-d H:i:s');
}
}
static function getScheduledTimeForWelcomeNotificationOrAutomaticEmails($after_time_type, $after_time_number) {
$current_time = Carbon::createFromTimestamp(WPFunctions::currentTime('timestamp'));
switch($after_time_type) {
case 'hours':
return $current_time->addHours($after_time_number);
case 'days':
return $current_time->addDays($after_time_number);
case 'weeks':
return $current_time->addWeeks($after_time_number);
default:
return $current_time;
}
}
}