Add automation email scheduler service

[MAILPOET-4465]
This commit is contained in:
Jan Jakes
2022-07-05 15:36:30 +02:00
committed by Veljko V
parent 578fa65122
commit 971da8a943
2 changed files with 52 additions and 0 deletions

View File

@@ -427,6 +427,7 @@ class ContainerConfigurator implements IContainerConfigurator {
$container->autowire(\MailPoet\Newsletter\Shortcodes\Categories\Subscriber::class)->setPublic(true);
$container->autowire(\MailPoet\Newsletter\Statistics\NewsletterStatisticsRepository::class)->setPublic(true);
$container->autowire(\MailPoet\Newsletter\Scheduler\AutomaticEmailScheduler::class)->setPublic(true);
$container->autowire(\MailPoet\Newsletter\Scheduler\AutomationEmailScheduler::class)->setPublic(true);
$container->autowire(\MailPoet\Newsletter\Scheduler\WelcomeScheduler::class)->setPublic(true);
$container->autowire(\MailPoet\Newsletter\Scheduler\PostNotificationScheduler::class)->setPublic(true);
$container->autowire(\MailPoet\Newsletter\Scheduler\ReEngagementScheduler::class)->setPublic(true);

View File

@@ -0,0 +1,51 @@
<?php declare(strict_types=1);
namespace MailPoet\Newsletter\Scheduler;
use MailPoet\Entities\NewsletterEntity;
use MailPoet\Entities\ScheduledTaskEntity;
use MailPoet\Entities\ScheduledTaskSubscriberEntity;
use MailPoet\Entities\SendingQueueEntity;
use MailPoet\Entities\SubscriberEntity;
use MailPoet\Tasks\Sending;
use MailPoet\WP\Functions as WPFunctions;
use MailPoetVendor\Carbon\Carbon;
use MailPoetVendor\Doctrine\ORM\EntityManager;
class AutomationEmailScheduler {
/** @var EntityManager */
private $entityManager;
/** @var WPFunctions */
private $wp;
public function __construct(
EntityManager $entityManager,
WPFunctions $wp
) {
$this->entityManager = $entityManager;
$this->wp = $wp;
}
public function createSendingTask(NewsletterEntity $email, SubscriberEntity $subscriber): ScheduledTaskEntity {
$task = new ScheduledTaskEntity();
$task->setType(Sending::TASK_TYPE);
$task->setStatus(ScheduledTaskEntity::STATUS_SCHEDULED);
$task->setScheduledAt(Carbon::createFromTimestamp($this->wp->currentTime('timestamp')));
$task->setPriority(ScheduledTaskEntity::PRIORITY_MEDIUM);
$this->entityManager->persist($task);
$taskSubscriber = new ScheduledTaskSubscriberEntity($task, $subscriber);
$this->entityManager->persist($taskSubscriber);
$queue = new SendingQueueEntity();
$queue->setTask($task);
$queue->setNewsletter($email);
$queue->setCountToProcess(1);
$queue->setCountTotal(1);
$this->entityManager->persist($queue);
$this->entityManager->flush();
return $task;
}
}