Use separate scheduler for welcome emails

[MAILPOET-2321]
This commit is contained in:
Pavel Dohnal
2019-08-28 14:06:49 +02:00
committed by M. Shull
parent 10e374ca60
commit c90a2e41a1
11 changed files with 437 additions and 337 deletions

View File

@ -59,20 +59,6 @@ class Scheduler {
}
}
static function scheduleSubscriberWelcomeNotification($subscriber_id, $segments) {
$newsletters = self::getNewsletters(Newsletter::TYPE_WELCOME);
if (empty($newsletters)) return false;
$result = [];
foreach ($newsletters as $newsletter) {
if ($newsletter->event === 'segment' &&
in_array($newsletter->segment, $segments)
) {
$result[] = self::createWelcomeNotificationSendingTask($newsletter, $subscriber_id);
}
}
return $result;
}
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;
@ -144,52 +130,6 @@ class Scheduler {
}
}
static function scheduleWPUserWelcomeNotification(
$subscriber_id,
$wp_user,
$old_user_data = false
) {
$newsletters = self::getNewsletters(Newsletter::TYPE_WELCOME);
if (empty($newsletters)) return false;
foreach ($newsletters as $newsletter) {
if ($newsletter->event === 'user') {
if (!empty($old_user_data['roles'])) {
// do not schedule welcome newsletter if roles have not changed
$old_role = $old_user_data['roles'];
$new_role = $wp_user['roles'];
if ($newsletter->role === self::WORDPRESS_ALL_ROLES ||
!array_diff($old_role, $new_role)
) {
continue;
}
}
if ($newsletter->role === self::WORDPRESS_ALL_ROLES ||
in_array($newsletter->role, $wp_user['roles'])
) {
self::createWelcomeNotificationSendingTask($newsletter, $subscriber_id);
}
}
}
}
static function createWelcomeNotificationSendingTask($newsletter, $subscriber_id) {
$previously_scheduled_notification = SendingQueue::joinWithSubscribers()
->where('queues.newsletter_id', $newsletter->id)
->where('subscribers.subscriber_id', $subscriber_id)
->findOne();
if (!empty($previously_scheduled_notification)) return;
$sending_task = SendingTask::create();
$sending_task->newsletter_id = $newsletter->id;
$sending_task->setSubscribers([$subscriber_id]);
$sending_task->status = SendingQueue::STATUS_SCHEDULED;
$sending_task->priority = SendingQueue::PRIORITY_HIGH;
$sending_task->scheduled_at = self::getScheduledTimeWithDelay(
$newsletter->afterTimeType,
$newsletter->afterTimeNumber
);
return $sending_task->save();
}
static function createAutomaticEmailSendingTask($newsletter, $subscriber_id, $meta) {
$sending_task = SendingTask::create();
$sending_task->newsletter_id = $newsletter->id;