- Refactors scheduler worker and updates logic responsible for scheduling
a new post notification queue
This commit is contained in:
@@ -8,6 +8,7 @@ use MailPoet\Models\SendingQueue;
|
|||||||
use MailPoet\Models\Subscriber;
|
use MailPoet\Models\Subscriber;
|
||||||
use MailPoet\Models\SubscriberSegment;
|
use MailPoet\Models\SubscriberSegment;
|
||||||
use MailPoet\Util\Helpers;
|
use MailPoet\Util\Helpers;
|
||||||
|
use MailPoet\Newsletter\Scheduler\Scheduler as NewsletterScheduler;
|
||||||
|
|
||||||
require_once(ABSPATH . 'wp-includes/pluggable.php');
|
require_once(ABSPATH . 'wp-includes/pluggable.php');
|
||||||
|
|
||||||
@@ -66,14 +67,9 @@ class Scheduler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function processPostNotificationNewsletter($newsletter, $queue) {
|
function processPostNotificationNewsletter($newsletter, $queue) {
|
||||||
$immediate_interval =
|
|
||||||
\MailPoet\Newsletter\Scheduler\Scheduler::INTERVAL_IMMEDIATELY;
|
|
||||||
$segments = $newsletter->segments()->findArray();
|
$segments = $newsletter->segments()->findArray();
|
||||||
if(empty($segments) && $newsletter->intervalType === $immediate_interval) {
|
if(empty($segments)) {
|
||||||
$queue->delete();
|
$this->deleteQueueOrUpdateNextRunDate($queue, $newsletter);
|
||||||
return;
|
|
||||||
} else {
|
|
||||||
self::updateQueueNextRunDate($queue, $newsletter);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
$segment_ids = array_map(function($segment) {
|
$segment_ids = array_map(function($segment) {
|
||||||
@@ -83,20 +79,17 @@ class Scheduler {
|
|||||||
->findArray();
|
->findArray();
|
||||||
$subscribers = Helpers::arrayColumn($subscribers, 'subscriber_id');
|
$subscribers = Helpers::arrayColumn($subscribers, 'subscriber_id');
|
||||||
$subscribers = array_unique($subscribers);
|
$subscribers = array_unique($subscribers);
|
||||||
if(empty($subscribers) && $newsletter->intervalType === $immediate_interval) {
|
if(empty($subscribers)) {
|
||||||
$queue->delete();
|
$this->deleteQueueOrUpdateNextRunDate($queue, $newsletter);
|
||||||
return;
|
|
||||||
} else {
|
|
||||||
self::updateQueueNextRunDate($queue, $newsletter);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// schedule new queue if the post notification is not destined for immediate delivery
|
// schedule new queue if the post notification is not destined for immediate delivery
|
||||||
if ($newsletter->intervalType !== $immediate_interval) {
|
if ($newsletter->intervalType !== NewsletterScheduler::INTERVAL_IMMEDIATELY) {
|
||||||
$new_queue = clone($queue);
|
$new_queue = SendingQueue::create();
|
||||||
$new_queue->scheduled_at = self::updateQueueNextRunDate($new_queue, $newsletter);
|
$new_queue->newsletter_id = $newsletter->id;
|
||||||
$new_queue->save();
|
$new_queue->status = NewsletterScheduler::STATUS_SCHEDULED;
|
||||||
|
self::deleteQueueOrUpdateNextRunDate($new_queue, $newsletter);
|
||||||
}
|
}
|
||||||
$new_scheduled_queue = SendingQueue::create();
|
|
||||||
$queue->subscribers = serialize(
|
$queue->subscribers = serialize(
|
||||||
array(
|
array(
|
||||||
'to_process' => $subscribers
|
'to_process' => $subscribers
|
||||||
@@ -171,10 +164,14 @@ class Scheduler {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private function updateQueueNextRunDate($queue, $newsletter) {
|
private function deleteQueueOrUpdateNextRunDate($queue, $newsletter) {
|
||||||
$next_run_date =
|
if($newsletter->intervalType === NewsletterScheduler::INTERVAL_IMMEDIATELY) {
|
||||||
\MailPoet\Newsletter\Scheduler\Scheduler::getNextRunDate($newsletter->schedule);
|
$queue->delete();
|
||||||
|
} else {
|
||||||
|
$next_run_date = NewsletterScheduler::getNextRunDate($newsletter->schedule);
|
||||||
$queue->scheduled_at = $next_run_date;
|
$queue->scheduled_at = $next_run_date;
|
||||||
$queue->save();
|
$queue->save();
|
||||||
}
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
Reference in New Issue
Block a user