Merge pull request #913 from mailpoet/sending_queue_update_on_newsletter_status_change
Prevents processing of sending queues when newsletter is paused [MAILPOET-900]
This commit is contained in:
@ -6,10 +6,10 @@ use MailPoet\Cron\Workers\SendingQueue\Tasks\Links;
|
||||
use MailPoet\Cron\Workers\SendingQueue\Tasks\Mailer as MailerTask;
|
||||
use MailPoet\Cron\Workers\SendingQueue\Tasks\Newsletter as NewsletterTask;
|
||||
use MailPoet\Mailer\MailerLog;
|
||||
use MailPoet\Models\Newsletter as NewsletterModel;
|
||||
use MailPoet\Models\SendingQueue as SendingQueueModel;
|
||||
use MailPoet\Models\StatisticsNewsletters as StatisticsNewslettersModel;
|
||||
use MailPoet\Models\Subscriber as SubscriberModel;
|
||||
use MailPoet\Router\Endpoints\Track;
|
||||
|
||||
if(!defined('ABSPATH')) exit;
|
||||
|
||||
@ -28,8 +28,12 @@ class SendingQueue {
|
||||
function process() {
|
||||
$this->enforceSendingAndExecutionLimits();
|
||||
foreach(self::getRunningQueues() as $queue) {
|
||||
// get and pre-process newsletter (render, replace shortcodes/links, etc.)
|
||||
$newsletter = $this->newsletter_task->getAndPreProcess($queue);
|
||||
$newsletter = $this->newsletter_task->getNewsletterFromQueue($queue);
|
||||
if(!$newsletter) {
|
||||
continue;
|
||||
}
|
||||
// pre-process newsletter (render, replace shortcodes/links, etc.)
|
||||
$newsletter = $this->newsletter_task->preProcessNewsletter($newsletter, $queue);
|
||||
if(!$newsletter) {
|
||||
$queue->delete();
|
||||
continue;
|
||||
@ -37,7 +41,7 @@ class SendingQueue {
|
||||
// configure mailer
|
||||
$this->mailer_task->configureMailer($newsletter);
|
||||
// get newsletter segments
|
||||
$newsletter_segments_ids = $this->newsletter_task->getSegments($newsletter);
|
||||
$newsletter_segments_ids = $this->newsletter_task->getNewsletterSegments($newsletter);
|
||||
// get subscribers
|
||||
$queue->subscribers = $queue->getSubscribers();
|
||||
$subscriber_batches = array_chunk(
|
||||
@ -184,4 +188,4 @@ class SendingQueue {
|
||||
->whereNull('type')
|
||||
->findMany();
|
||||
}
|
||||
}
|
||||
}
|
@ -22,11 +22,31 @@ class Newsletter {
|
||||
$this->tracking_enabled = (boolean)Setting::getValue('tracking.enabled');
|
||||
}
|
||||
|
||||
function getAndPreProcess($queue) {
|
||||
$newsletter = $queue->newsletter()->whereNull('deleted_at')->findOne();
|
||||
if(!$newsletter) {
|
||||
return false;
|
||||
function getNewsletterFromQueue($queue) {
|
||||
// get existing active or sending newsletter
|
||||
$newsletter = $queue->newsletter()
|
||||
->whereNull('deleted_at')
|
||||
->whereAnyIs(array(
|
||||
array('status' => NewsletterModel::STATUS_ACTIVE),
|
||||
array('status' => NewsletterModel::STATUS_SENDING)
|
||||
))
|
||||
->findOne();
|
||||
if(!$newsletter) return false;
|
||||
// if this is a notification history, get existing active or sending parent newsletter
|
||||
if($newsletter->type == NewsletterModel::TYPE_NOTIFICATION_HISTORY) {
|
||||
$parent_newsletter = $newsletter->parent()
|
||||
->whereNull('deleted_at')
|
||||
->whereAnyIs(array(
|
||||
array('status' => NewsletterModel::STATUS_ACTIVE),
|
||||
array('status' => NewsletterModel::STATUS_SENDING)
|
||||
))
|
||||
->findOne();
|
||||
if(!$parent_newsletter) return false;
|
||||
}
|
||||
return $newsletter;
|
||||
}
|
||||
|
||||
function preProcessNewsletter($newsletter, $queue) {
|
||||
// return the newsletter if it was previously rendered
|
||||
if(!is_null($queue->getNewsletterRenderedBody())) {
|
||||
return $newsletter;
|
||||
@ -113,7 +133,7 @@ class Newsletter {
|
||||
}
|
||||
}
|
||||
|
||||
function getSegments($newsletter) {
|
||||
function getNewsletterSegments($newsletter) {
|
||||
$segments = NewsletterSegmentModel::where('newsletter_id', $newsletter->id)
|
||||
->select('segment_id')
|
||||
->findArray();
|
||||
|
Reference in New Issue
Block a user