diff --git a/lib/Cron/Daemon.php b/lib/Cron/Daemon.php index 5d09e57266..d9dfa2c437 100644 --- a/lib/Cron/Daemon.php +++ b/lib/Cron/Daemon.php @@ -86,5 +86,6 @@ class Daemon { if ($this->featureSwitch->isSupported(FeaturesController::RE_ENGAGEMENT_EMAIL)) { yield $this->workersFactory->createReEngagementEmailsSchedulerWorker(); } + yield $this->workersFactory->createNewsletterTemplateThumbnailsWorker(); } } diff --git a/lib/Cron/Triggers/WordPress.php b/lib/Cron/Triggers/WordPress.php index 9fddaf9783..e0db276ea3 100644 --- a/lib/Cron/Triggers/WordPress.php +++ b/lib/Cron/Triggers/WordPress.php @@ -9,6 +9,7 @@ use MailPoet\Cron\Workers\Bounce as BounceWorker; use MailPoet\Cron\Workers\InactiveSubscribers; use MailPoet\Cron\Workers\KeyCheck\PremiumKeyCheck as PremiumKeyCheckWorker; use MailPoet\Cron\Workers\KeyCheck\SendingServiceKeyCheck as SendingServiceKeyCheckWorker; +use MailPoet\Cron\Workers\NewsletterTemplateThumbnails; use MailPoet\Cron\Workers\ReEngagementEmailsScheduler; use MailPoet\Cron\Workers\Scheduler as SchedulerWorker; use MailPoet\Cron\Workers\SendingQueue\Migration as MigrationWorker; @@ -250,6 +251,13 @@ class WordPress { 'status' => ['null', ScheduledTask::STATUS_SCHEDULED], ]); + // newsletter template thumbnails + $newsletterTemplateThumbnailsTasks = $this->getTasksCount([ + 'type' => NewsletterTemplateThumbnails::TASK_TYPE, + 'scheduled_in' => [self::SCHEDULED_IN_THE_PAST], + 'status' => ['null', ScheduledTask::STATUS_SCHEDULED], + ]); + // check requirements for each worker $sendingQueueActive = (($scheduledQueues || $runningQueues) && !$sendingLimitReached && !$sendingIsPaused); $bounceSyncActive = ($mpSendingEnabled && ($bounceDueTasks || !$bounceFutureTasks)); @@ -279,6 +287,7 @@ class WordPress { || $subscribersCountCacheRecalculationTasks || $subscribersLastEngagementTasks || $subscribersReEngagementSchedulingTasks + || $newsletterTemplateThumbnailsTasks ); } diff --git a/lib/Cron/Workers/NewsletterTemplateThumbnails.php b/lib/Cron/Workers/NewsletterTemplateThumbnails.php new file mode 100644 index 0000000000..b49fbaaf77 --- /dev/null +++ b/lib/Cron/Workers/NewsletterTemplateThumbnails.php @@ -0,0 +1,29 @@ +thumbnailSaver = $thumbnailSaver; + } + + public function processTaskStrategy(ScheduledTaskEntity $task, $timer) { + $this->thumbnailSaver->ensureTemplateThumbnailsForAll(); + return true; + } +} diff --git a/lib/Cron/Workers/WorkersFactory.php b/lib/Cron/Workers/WorkersFactory.php index a3fafb4d25..1f5cfd6a3e 100644 --- a/lib/Cron/Workers/WorkersFactory.php +++ b/lib/Cron/Workers/WorkersFactory.php @@ -127,4 +127,9 @@ class WorkersFactory { public function createSubscribersStatsReportWorker() { return $this->container->get(SubscribersStatsReport::class); } + + /** @return NewsletterTemplateThumbnails */ + public function createNewsletterTemplateThumbnailsWorker() { + return $this->container->get(NewsletterTemplateThumbnails::class); + } } diff --git a/lib/DI/ContainerConfigurator.php b/lib/DI/ContainerConfigurator.php index 94ba4be3b8..5c82275682 100644 --- a/lib/DI/ContainerConfigurator.php +++ b/lib/DI/ContainerConfigurator.php @@ -174,6 +174,7 @@ class ContainerConfigurator implements IContainerConfigurator { $container->autowire(\MailPoet\Cron\Workers\SubscribersLastEngagement::class)->setPublic(true); $container->autowire(\MailPoet\Cron\Workers\SubscribersCountCacheRecalculation::class)->setPublic(true); $container->autowire(\MailPoet\Cron\Workers\SubscribersStatsReport::class)->setPublic(true); + $container->autowire(\MailPoet\Cron\Workers\NewsletterTemplateThumbnails::class)->setPublic(true); // Custom field $container->autowire(\MailPoet\CustomFields\ApiDataSanitizer::class); $container->autowire(\MailPoet\CustomFields\CustomFieldsRepository::class)->setPublic(true); diff --git a/lib/NewsletterTemplates/ThumbnailSaver.php b/lib/NewsletterTemplates/ThumbnailSaver.php index 49a051bf7c..6ff811e07f 100644 --- a/lib/NewsletterTemplates/ThumbnailSaver.php +++ b/lib/NewsletterTemplates/ThumbnailSaver.php @@ -32,6 +32,13 @@ class ThumbnailSaver { $this->baseUrl = Env::$tempUrl; } + public function ensureTemplateThumbnailsForAll() { + $templates = $this->repository->findBy(['readonly' => false]); + foreach ($templates as $template) { + $this->ensureTemplateThumbnailFile($template); + } + } + public function ensureTemplateThumbnailFile(NewsletterTemplateEntity $template): NewsletterTemplateEntity { if ($template->getReadonly()) { return $template; diff --git a/tests/integration/Cron/DaemonHttpRunnerTest.php b/tests/integration/Cron/DaemonHttpRunnerTest.php index 53a6b61861..c5ffd0daeb 100644 --- a/tests/integration/Cron/DaemonHttpRunnerTest.php +++ b/tests/integration/Cron/DaemonHttpRunnerTest.php @@ -306,6 +306,8 @@ class DaemonHttpRunnerTest extends \MailPoetTest { 'createSubscribersEngagementScoreWorker' => $worker, 'createSubscribersLastEngagementWorker' => $worker, 'createSubscribersCountCacheRecalculationWorker' => $worker, + 'createReEngagementEmailsSchedulerWorker' => $worker, + 'createNewsletterTemplateThumbnailsWorker' => $worker, ]); } } diff --git a/tests/integration/Cron/DaemonTest.php b/tests/integration/Cron/DaemonTest.php index ff61c4f1b7..60eae43542 100644 --- a/tests/integration/Cron/DaemonTest.php +++ b/tests/integration/Cron/DaemonTest.php @@ -62,6 +62,8 @@ class DaemonTest extends \MailPoetTest { 'createSubscribersEngagementScoreWorker' => $this->createSimpleWorkerMock(), 'createSubscribersLastEngagementWorker' => $this->createSimpleWorkerMock(), 'createSubscribersCountCacheRecalculationWorker' => $this->createSimpleWorkerMock(), + 'createReEngagementEmailsSchedulerWorker' => $this->createSimpleWorkerMock(), + 'createNewsletterTemplateThumbnailsWorker' => $this->createSimpleWorkerMock(), ]); }