diff --git a/lib/Cron/Workers/SendingQueue/SendingQueue.php b/lib/Cron/Workers/SendingQueue/SendingQueue.php index b8e3192637..a9f16274f3 100644 --- a/lib/Cron/Workers/SendingQueue/SendingQueue.php +++ b/lib/Cron/Workers/SendingQueue/SendingQueue.php @@ -129,12 +129,12 @@ class SendingQueue { 'queue_id' => $queue->id ); if($processing_method === 'individual') { - $queue = $this->sendNewsletters( + $queue = $this->sendNewsletter( $queue, - $prepared_subscribers_ids, + $prepared_subscribers_ids[0], $prepared_newsletters[0], $prepared_subscribers[0], - $statistics, + $statistics[0], array('unsubscribe_url' => $unsubscribe_urls[0]) ); $prepared_newsletters = array(); @@ -157,16 +157,37 @@ class SendingQueue { return $queue; } + function sendNewsletter( + SendingTask $sending_task, $prepared_subscriber_id, $prepared_newsletter, + $prepared_subscriber, $statistics, $extra_params = array() + ) { + // send newsletter + $send_result = $this->mailer_task->send( + $prepared_newsletter, + $prepared_subscriber, + $extra_params + ); + return $this->processSendResult($sending_task, $send_result, [$prepared_subscriber_id], [$statistics]); + } + function sendNewsletters( SendingTask $sending_task, $prepared_subscribers_ids, $prepared_newsletters, $prepared_subscribers, $statistics, $extra_params = array() ) { - // send newsletter - $send_result = $this->mailer_task->send( + // send newsletters + $send_result = $this->mailer_task->sendBulk( $prepared_newsletters, $prepared_subscribers, $extra_params ); + return $this->processSendResult($sending_task, $send_result, $prepared_subscribers_ids, $statistics); + } + + private function processSendResult( + SendingTask $sending_task, + $send_result, + array $prepared_subscribers_ids, array $statistics + ) { // log error message and schedule retry/pause sending if($send_result['response'] === false) { $error = $send_result['error']; diff --git a/lib/Cron/Workers/SendingQueue/Tasks/Mailer.php b/lib/Cron/Workers/SendingQueue/Tasks/Mailer.php index c511238f12..81719e3148 100644 --- a/lib/Cron/Workers/SendingQueue/Tasks/Mailer.php +++ b/lib/Cron/Workers/SendingQueue/Tasks/Mailer.php @@ -54,11 +54,25 @@ class Mailer { return $this->mailer->formatSubscriberNameAndEmailAddress($subscriber); } - function send($prepared_newsletters, $prepared_subscribers, $extra_params = array()) { + function sendBulk($prepared_newsletters, $prepared_subscribers, $extra_params = array()) { + if($this->getProcessingMethod() === 'individual') { + throw new \LogicException('Trying to send a batch with individual processing method'); + } return $this->mailer->mailer_instance->send( $prepared_newsletters, $prepared_subscribers, $extra_params ); } + + function send($prepared_newsletter, $prepared_subscriber, $extra_params = array()) { + if($this->getProcessingMethod() === 'bulk') { + throw new \LogicException('Trying to send an individual email with a bulk processing method'); + } + return $this->mailer->mailer_instance->send( + $prepared_newsletter, + $prepared_subscriber, + $extra_params + ); + } } diff --git a/tests/unit/Cron/Workers/SendingQueue/SendingQueueTest.php b/tests/unit/Cron/Workers/SendingQueue/SendingQueueTest.php index d5bc141af2..2b7cc400bb 100644 --- a/tests/unit/Cron/Workers/SendingQueue/SendingQueueTest.php +++ b/tests/unit/Cron/Workers/SendingQueue/SendingQueueTest.php @@ -140,7 +140,7 @@ class SendingQueueTest extends \MailPoetTest { Stub::make( new MailerTask(), array( - 'send' => null + 'sendBulk' => null ) ) ); @@ -174,7 +174,7 @@ class SendingQueueTest extends \MailPoetTest { Stub::make( new MailerTask(), array( - 'send' => null + 'sendBulk' => null ) ) ); @@ -313,7 +313,7 @@ class SendingQueueTest extends \MailPoetTest { Stub::make( new MailerTask(), array( - 'send' => Expected::exactly(1, function($newsletter, $subscriber) { + 'sendBulk' => Expected::exactly(1, function($newsletter, $subscriber) { // newsletter body should not be empty expect(!empty($newsletter[0]['body']['html']))->true(); expect(!empty($newsletter[0]['body']['text']))->true(); @@ -598,16 +598,16 @@ class SendingQueueTest extends \MailPoetTest { Stub::make( new MailerTask(), array( - 'send' => true + 'sendBulk' => true ) ) ); try { $sending_queue_worker->sendNewsletters( $sending_task->getObject(), - $prepared_subscribers = array(), - $prepared_newsletters = false, - $prepared_subscribers = false, + $prepared_subscribers = [], + $prepared_newsletters = [], + $prepared_subscribers = [], $statistics = false ); $this->fail('Paused sending exception was not thrown.'); diff --git a/tests/unit/Cron/Workers/SendingQueue/Tasks/MailerTest.php b/tests/unit/Cron/Workers/SendingQueue/Tasks/MailerTest.php index eec241a6a8..8fd07dd43e 100644 --- a/tests/unit/Cron/Workers/SendingQueue/Tasks/MailerTest.php +++ b/tests/unit/Cron/Workers/SendingQueue/Tasks/MailerTest.php @@ -114,7 +114,10 @@ class MailerTest extends \MailPoetTest { return true; })), $this - ) + ), + 'mailer_config' => [ + 'method' => null, + ] ) ); // mailer instance should be properly configured @@ -128,4 +131,4 @@ class MailerTest extends \MailPoetTest { \ORM::raw_execute('TRUNCATE ' . Setting::$_table); \ORM::raw_execute('TRUNCATE ' . Subscriber::$_table); } -} \ No newline at end of file +}