- Implements welcome e-mail scheduling

This commit is contained in:
Vlad
2016-03-16 21:06:09 -04:00
parent 1795964c69
commit 6e289b6a8f
4 changed files with 93 additions and 17 deletions

View File

@ -0,0 +1,71 @@
<?php
namespace MailPoet\Newsletter\Scheduler;
use Carbon\Carbon;
use MailPoet\Models\Newsletter;
use MailPoet\Models\SendingQueue;
class Scheduler {
static function newSegmentSubscriptionNewsletter(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);
}
}
}
static function newUserRegistrationNewsletter(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);
}
}
}
private static function getWelcomeNewsletters() {
return Newsletter::where('type', 'welcome')
->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();
}
}