diff --git a/mailpoet/lib/Cron/Workers/SendingQueue/SendingErrorHandler.php b/mailpoet/lib/Cron/Workers/SendingQueue/SendingErrorHandler.php index e074689684..83a4064e38 100644 --- a/mailpoet/lib/Cron/Workers/SendingQueue/SendingErrorHandler.php +++ b/mailpoet/lib/Cron/Workers/SendingQueue/SendingErrorHandler.php @@ -2,30 +2,36 @@ namespace MailPoet\Cron\Workers\SendingQueue; +use MailPoet\Entities\ScheduledTaskEntity; use MailPoet\Mailer\MailerError; use MailPoet\Mailer\MailerLog; -use MailPoet\Tasks\Sending as SendingTask; +use MailPoet\Newsletter\Sending\ScheduledTaskSubscribersRepository; class SendingErrorHandler { + /** @var ScheduledTaskSubscribersRepository */ + private $scheduledTaskSubscribersRepository; + /** @var SendingThrottlingHandler */ private $throttlingHandler; public function __construct( + ScheduledTaskSubscribersRepository $scheduledTaskSubscribersRepository, SendingThrottlingHandler $throttlingHandler ) { + $this->scheduledTaskSubscribersRepository = $scheduledTaskSubscribersRepository; $this->throttlingHandler = $throttlingHandler; } public function processError( MailerError $error, - SendingTask $sendingTask, + ScheduledTaskEntity $task, array $preparedSubscribersIds, array $preparedSubscribers ) { if ($error->getLevel() === MailerError::LEVEL_HARD) { return $this->processHardError($error); } - $this->processSoftError($error, $sendingTask, $preparedSubscribersIds, $preparedSubscribers); + $this->processSoftError($error, $task, $preparedSubscribersIds, $preparedSubscribers); } private function processHardError(MailerError $error) { @@ -40,11 +46,11 @@ class SendingErrorHandler { } } - private function processSoftError(MailerError $error, SendingTask $sendingTask, $preparedSubscribersIds, $preparedSubscribers) { + private function processSoftError(MailerError $error, ScheduledTaskEntity $task, $preparedSubscribersIds, $preparedSubscribers) { foreach ($error->getSubscriberErrors() as $subscriberError) { $subscriberIdIndex = array_search($subscriberError->getEmail(), $preparedSubscribers); $message = $subscriberError->getMessage() ?: $error->getMessage(); - $sendingTask->saveSubscriberError($preparedSubscribersIds[$subscriberIdIndex], $message); + $this->scheduledTaskSubscribersRepository->saveError($task, $preparedSubscribersIds[$subscriberIdIndex], $message ?? ''); } } } diff --git a/mailpoet/lib/Cron/Workers/SendingQueue/SendingQueue.php b/mailpoet/lib/Cron/Workers/SendingQueue/SendingQueue.php index 930105e03a..13024a2acd 100644 --- a/mailpoet/lib/Cron/Workers/SendingQueue/SendingQueue.php +++ b/mailpoet/lib/Cron/Workers/SendingQueue/SendingQueue.php @@ -508,11 +508,7 @@ class SendingQueue { // log error message and schedule retry/pause sending if ($sendResult['response'] === false) { $error = $sendResult['error']; - $legacyTask = ScheduledTask::findOne($task->getId()); - $legacyQueue = $legacyTask ? SendingTask::createFromScheduledTask($legacyTask) : null; - if ($legacyQueue) { - $this->errorHandler->processError($error, $legacyQueue, $preparedSubscribersIds, $preparedSubscribers); - } + $this->errorHandler->processError($error, $task, $preparedSubscribersIds, $preparedSubscribers); } else { $queue = $task->getSendingQueue(); if (!$queue) { diff --git a/mailpoet/lib/Tasks/Sending.php b/mailpoet/lib/Tasks/Sending.php index 79b6341bad..915f8a1ff6 100644 --- a/mailpoet/lib/Tasks/Sending.php +++ b/mailpoet/lib/Tasks/Sending.php @@ -279,23 +279,6 @@ class Sending { return $this->updateCount(count($processedSubscribers))->getErrors() === false; } - public function saveSubscriberError($subcriberId, $errorMessage) { - $this->scheduledTaskSubscribersRepository->saveError($this->scheduledTaskEntity, $subcriberId, $errorMessage); - - $this->updateTaskStatus(); - - return $this->updateCount()->getErrors() === false; - } - - private function updateTaskStatus() { - // we need to update those fields here as the Sending class is in a mixed state using Paris and Doctrine at the same time - // this probably won't be necessary anymore once https://mailpoet.atlassian.net/browse/MAILPOET-4375 is finished - $this->task->status = $this->scheduledTaskEntity->getStatus(); - if (!is_null($this->scheduledTaskEntity->getProcessedAt())) { - $this->task->processedAt = $this->scheduledTaskEntity->getProcessedAt()->format('Y-m-d H:i:s'); - } - } - public function updateCount(?int $count = null) { if ($count) { // increment/decrement counts based on known subscriber count, don't exceed the bounds