- Refactors scheduler worker and updates logic responsible for scheduling

a new post notification queue
This commit is contained in:
Vlad
2016-05-18 15:40:41 -04:00
parent 8f935df12a
commit acfcfdd730

View File

@@ -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;
}
} }