diff --git a/mailpoet/lib/Cron/Workers/InactiveSubscribers.php b/mailpoet/lib/Cron/Workers/InactiveSubscribers.php index 07c5b43934..1757fd9fab 100644 --- a/mailpoet/lib/Cron/Workers/InactiveSubscribers.php +++ b/mailpoet/lib/Cron/Workers/InactiveSubscribers.php @@ -3,11 +3,10 @@ namespace MailPoet\Cron\Workers; use MailPoet\Entities\ScheduledTaskEntity; -use MailPoet\Entities\SubscriberEntity; use MailPoet\Settings\SettingsController; use MailPoet\Settings\TrackingConfig; use MailPoet\Subscribers\InactiveSubscribersController; -use MailPoetVendor\Doctrine\ORM\EntityManager; +use MailPoet\Subscribers\SubscribersRepository; class InactiveSubscribers extends SimpleWorker { const TASK_TYPE = 'inactive_subscribers'; @@ -23,19 +22,19 @@ class InactiveSubscribers extends SimpleWorker { /** @var TrackingConfig */ private $trackingConfig; - /** @var EntityManager */ - private $entityManager; + /** @var SubscribersRepository */ + private $subscribersRepository; public function __construct( InactiveSubscribersController $inactiveSubscribersController, SettingsController $settings, TrackingConfig $trackingConfig, - EntityManager $entityManager + SubscribersRepository $subscribersRepository ) { $this->inactiveSubscribersController = $inactiveSubscribersController; $this->settings = $settings; $this->trackingConfig = $trackingConfig; - $this->entityManager = $entityManager; + $this->subscribersRepository = $subscribersRepository; parent::__construct(); } @@ -58,11 +57,7 @@ class InactiveSubscribers extends SimpleWorker { if (isset($meta['max_subscriber_id'])) { $maxSubscriberId = $meta['max_subscriber_id']; } else { - $maxSubscriberId = $this->entityManager->createQueryBuilder() - ->select('MAX(s.id)') - ->from(SubscriberEntity::class, 's') - ->getQuery() - ->getSingleScalarResult(); + $maxSubscriberId = $this->subscribersRepository->getMaxSubscriberId(); } while ($lastSubscriberId <= $maxSubscriberId) { diff --git a/mailpoet/lib/Subscribers/SubscribersRepository.php b/mailpoet/lib/Subscribers/SubscribersRepository.php index 7c4d21ad56..671d361fa6 100644 --- a/mailpoet/lib/Subscribers/SubscribersRepository.php +++ b/mailpoet/lib/Subscribers/SubscribersRepository.php @@ -362,4 +362,14 @@ class SubscribersRepository extends Repository { ->getQuery() ->getArrayResult(); } + + public function getMaxSubscriberId(): int { + $maxSubscriberId = $this->entityManager->createQueryBuilder() + ->select('MAX(s.id)') + ->from(SubscriberEntity::class, 's') + ->getQuery() + ->getSingleScalarResult(); + + return is_int($maxSubscriberId) ? $maxSubscriberId : 0; + } } diff --git a/mailpoet/tests/integration/Cron/Workers/InactiveSubscribersTest.php b/mailpoet/tests/integration/Cron/Workers/InactiveSubscribersTest.php index cd1a3c00c6..9f80be18a6 100644 --- a/mailpoet/tests/integration/Cron/Workers/InactiveSubscribersTest.php +++ b/mailpoet/tests/integration/Cron/Workers/InactiveSubscribersTest.php @@ -11,6 +11,7 @@ use MailPoet\Newsletter\Sending\ScheduledTasksRepository; use MailPoet\Settings\SettingsController; use MailPoet\Settings\TrackingConfig; use MailPoet\Subscribers\InactiveSubscribersController; +use MailPoet\Subscribers\SubscribersRepository; use MailPoetVendor\Carbon\Carbon; class InactiveSubscribersTest extends \MailPoetTest { @@ -22,12 +23,16 @@ class InactiveSubscribersTest extends \MailPoetTest { /** @var ScheduledTasksRepository */ private $scheduledTasksRepository; + /** @var SubscribersRepository */ + private $subscribersRepository; + public function _before() { $this->settings = SettingsController::getInstance(); $this->scheduledTasksRepository = $this->diContainer->get(ScheduledTasksRepository::class); $this->truncateEntity(ScheduledTaskEntity::class); $this->settings->set('tracking.level', TrackingConfig::LEVEL_PARTIAL); $this->cronHelper = ContainerWrapper::getInstance()->get(CronHelper::class); + $this->subscribersRepository = ContainerWrapper::getInstance()->get(SubscribersRepository::class); parent::_before(); } @@ -39,7 +44,7 @@ class InactiveSubscribersTest extends \MailPoetTest { 'reactivateInactiveSubscribers' => Stub\Expected::once(), ], $this); - $worker = new InactiveSubscribers($controllerMock, $this->settings, $this->diContainer->get(TrackingConfig::class), $this->entityManager); + $worker = new InactiveSubscribers($controllerMock, $this->settings, $this->diContainer->get(TrackingConfig::class), $this->subscribersRepository); $worker->processTaskStrategy(new ScheduledTaskEntity(), microtime(true)); $task = $this->scheduledTasksRepository->findOneBy( @@ -60,7 +65,7 @@ class InactiveSubscribersTest extends \MailPoetTest { 'reactivateInactiveSubscribers' => Stub\Expected::never(), ], $this); - $worker = new InactiveSubscribers($controllerMock, $this->settings, $this->diContainer->get(TrackingConfig::class), $this->entityManager); + $worker = new InactiveSubscribers($controllerMock, $this->settings, $this->diContainer->get(TrackingConfig::class), $this->subscribersRepository); $worker->processTaskStrategy(new ScheduledTaskEntity(), microtime(true)); } @@ -72,7 +77,7 @@ class InactiveSubscribersTest extends \MailPoetTest { 'reactivateInactiveSubscribers' => Stub\Expected::never(), ], $this); - $worker = new InactiveSubscribers($controllerMock, $this->settings, $this->diContainer->get(TrackingConfig::class), $this->entityManager); + $worker = new InactiveSubscribers($controllerMock, $this->settings, $this->diContainer->get(TrackingConfig::class), $this->subscribersRepository); $worker->processTaskStrategy(new ScheduledTaskEntity(), microtime(true)); $task = $this->scheduledTasksRepository->findOneBy( @@ -92,7 +97,7 @@ class InactiveSubscribersTest extends \MailPoetTest { 'reactivateInactiveSubscribers' => Stub\Expected::never(), ], $this); - $worker = new InactiveSubscribers($controllerMock, $this->settings, $this->diContainer->get(TrackingConfig::class), $this->entityManager); + $worker = new InactiveSubscribers($controllerMock, $this->settings, $this->diContainer->get(TrackingConfig::class), $this->subscribersRepository); $task = new ScheduledTaskEntity(); $task->setMeta(['max_subscriber_id' => 2001 /* 3 iterations of BATCH_SIZE in markInactiveSubscribers */]); $this->entityManager->persist($task); @@ -113,7 +118,7 @@ class InactiveSubscribersTest extends \MailPoetTest { $task = new ScheduledTaskEntity(); - $worker = new InactiveSubscribers($controllerMock, $this->settings, $this->diContainer->get(TrackingConfig::class), $this->entityManager); + $worker = new InactiveSubscribers($controllerMock, $this->settings, $this->diContainer->get(TrackingConfig::class), $this->subscribersRepository); $worker->processTaskStrategy($task, microtime(true)); $meta = $task->getMeta(); @@ -128,7 +133,7 @@ class InactiveSubscribersTest extends \MailPoetTest { 'reactivateInactiveSubscribers' => Stub\Expected::never(), ], $this); - $worker = new InactiveSubscribers($controllerMock, $this->settings, $this->diContainer->get(TrackingConfig::class), $this->entityManager); + $worker = new InactiveSubscribers($controllerMock, $this->settings, $this->diContainer->get(TrackingConfig::class), $this->subscribersRepository); $this->expectException(\Exception::class); $this->expectExceptionMessage('Maximum execution time has been reached.'); $worker->processTaskStrategy(new ScheduledTaskEntity(), microtime(true) - $this->cronHelper->getDaemonExecutionLimit());