diff --git a/mailpoet/lib/AdminPages/Pages/Help.php b/mailpoet/lib/AdminPages/Pages/Help.php index 2ef58e00bb..f4006cb430 100644 --- a/mailpoet/lib/AdminPages/Pages/Help.php +++ b/mailpoet/lib/AdminPages/Pages/Help.php @@ -8,6 +8,7 @@ use MailPoet\Cron\ActionScheduler\Actions\DaemonTrigger; use MailPoet\Cron\CronHelper; use MailPoet\Helpscout\Beacon; use MailPoet\Mailer\MailerLog; +use MailPoet\Newsletter\Sending\ScheduledTasksRepository; use MailPoet\Router\Endpoints\CronDaemon; use MailPoet\Services\Bridge; use MailPoet\Tasks\Sending; @@ -29,18 +30,23 @@ class Help { /** @var Bridge $bridge */ private $bridge; + /*** @var ScheduledTasksRepository */ + private $scheduledTasksRepository; + public function __construct( PageRenderer $pageRenderer, State $tasksState, CronHelper $cronHelper, Beacon $helpscoutBeacon, - Bridge $bridge + Bridge $bridge, + ScheduledTasksRepository $scheduledTasksRepository ) { $this->pageRenderer = $pageRenderer; $this->tasksState = $tasksState; $this->cronHelper = $cronHelper; $this->helpscoutBeacon = $helpscoutBeacon; $this->bridge = $bridge; + $this->scheduledTasksRepository = $scheduledTasksRepository; } public function render() { @@ -69,7 +75,7 @@ class Help { 'queueStatus' => $mailerLog, ]; $systemStatusData['cronStatus']['accessible'] = $this->cronHelper->isDaemonAccessible(); - $systemStatusData['queueStatus']['tasksStatusCounts'] = $this->tasksState->getCountsPerStatus(); + $systemStatusData['queueStatus']['tasksStatusCounts'] = $this->scheduledTasksRepository->getCountsPerStatus(); $systemStatusData['queueStatus']['latestTasks'] = $this->tasksState->getLatestTasks(Sending::TASK_TYPE); $this->pageRenderer->displayPage( 'help.html', diff --git a/mailpoet/lib/Newsletter/Sending/ScheduledTasksRepository.php b/mailpoet/lib/Newsletter/Sending/ScheduledTasksRepository.php index d29857f3be..a25059fdce 100644 --- a/mailpoet/lib/Newsletter/Sending/ScheduledTasksRepository.php +++ b/mailpoet/lib/Newsletter/Sending/ScheduledTasksRepository.php @@ -126,6 +126,34 @@ class ScheduledTasksRepository extends Repository { return $this->findByTypeAndStatus($type, ScheduledTaskEntity::STATUS_SCHEDULED, $limit, true); } + public function getCountsPerStatus(string $type = 'sending') { + $stats = [ + ScheduledTaskEntity::STATUS_COMPLETED => 0, + ScheduledTaskEntity::STATUS_PAUSED => 0, + ScheduledTaskEntity::STATUS_SCHEDULED => 0, + ScheduledTaskEntity::VIRTUAL_STATUS_RUNNING => 0, + ]; + + $counts = $this->doctrineRepository->createQueryBuilder('st') + ->select('COUNT(st.id) as value') + ->addSelect('st.status') + ->where('st.deletedAt IS NULL') + ->andWhere('st.type = :type') + ->setParameter('type', $type) + ->addGroupBy('st.status') + ->getQuery() + ->getResult(); + + foreach ($counts as $count) { + if ($count['status'] === null) { + $stats[ScheduledTaskEntity::VIRTUAL_STATUS_RUNNING] = (int)$count['value']; + continue; + } + $stats[$count['status']] = (int)$count['value']; + } + return $stats; + } + /** * @return ScheduledTaskEntity[] */ diff --git a/mailpoet/tests/integration/Newsletter/Sending/ScheduledTasksRepositoryTest.php b/mailpoet/tests/integration/Newsletter/Sending/ScheduledTasksRepositoryTest.php index 2a879c2692..62fada1f43 100644 --- a/mailpoet/tests/integration/Newsletter/Sending/ScheduledTasksRepositoryTest.php +++ b/mailpoet/tests/integration/Newsletter/Sending/ScheduledTasksRepositoryTest.php @@ -90,6 +90,24 @@ class ScheduledTasksRepositoryTest extends \MailPoetTest { $this->assertSame($expectedResult, $tasks); } + public function testCanCountByStatus(){ + $this->scheduledTaskFactory->create('sending', ScheduledTaskEntity::STATUS_SCHEDULED, Carbon::now()->addDay()); + $this->scheduledTaskFactory->create('sending', ScheduledTaskEntity::STATUS_SCHEDULED, Carbon::now()->addDays(20)); + $this->scheduledTaskFactory->create('sending', ScheduledTaskEntity::STATUS_PAUSED, Carbon::now()->addDay()); + $this->scheduledTaskFactory->create('sending', ScheduledTaskEntity::STATUS_PAUSED, Carbon::now()->addDays(3)); + $this->scheduledTaskFactory->create('sending', ScheduledTaskEntity::STATUS_PAUSED, Carbon::now()->addDays(5)); + $this->scheduledTaskFactory->create('sending', ScheduledTaskEntity::STATUS_INVALID, Carbon::now()->addDays(4)); + $this->scheduledTaskFactory->create('sending', NULL, Carbon::now()->addDays(4)); + + $counts = $this->repository->getCountsPerStatus(); + $this->assertEquals([ + ScheduledTaskEntity::STATUS_SCHEDULED => 2, + ScheduledTaskEntity::STATUS_PAUSED => 3, + ScheduledTaskEntity::STATUS_INVALID => 1, + ScheduledTaskEntity::VIRTUAL_STATUS_RUNNING => 1, + ScheduledTaskEntity::STATUS_COMPLETED => 0, + ], $counts); + } public function cleanup() { $this->truncateEntity(ScheduledTaskEntity::class); }