64 lines
2.1 KiB
PHP
64 lines
2.1 KiB
PHP
<?php declare(strict_types = 1);
|
|
|
|
namespace MailPoet\Newsletter\Scheduler;
|
|
|
|
if (!defined('ABSPATH')) exit;
|
|
|
|
|
|
use MailPoet\Cron\Workers\SendingQueue\SendingQueue;
|
|
use MailPoet\Entities\NewsletterEntity;
|
|
use MailPoet\Entities\ScheduledTaskEntity;
|
|
use MailPoet\Entities\ScheduledTaskSubscriberEntity;
|
|
use MailPoet\Entities\SendingQueueEntity;
|
|
use MailPoet\Entities\SubscriberEntity;
|
|
use MailPoet\InvalidStateException;
|
|
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, array $meta): ScheduledTaskEntity {
|
|
if (!in_array($email->getType(), [NewsletterEntity::TYPE_AUTOMATION, NewsletterEntity::TYPE_AUTOMATION_TRANSACTIONAL], true)) {
|
|
throw InvalidStateException::create()->withMessage(
|
|
// translators: %s is the type which was given.
|
|
sprintf(__("Email with type 'automation' or 'automation_transactional' expected, '%s' given.", 'mailpoet'), $email->getType())
|
|
);
|
|
}
|
|
|
|
$task = new ScheduledTaskEntity();
|
|
$task->setType(SendingQueue::TASK_TYPE);
|
|
$task->setStatus(ScheduledTaskEntity::STATUS_SCHEDULED);
|
|
$task->setScheduledAt(Carbon::createFromTimestamp($this->wp->currentTime('timestamp')));
|
|
$task->setPriority(ScheduledTaskEntity::PRIORITY_MEDIUM);
|
|
$task->setMeta($meta);
|
|
$this->entityManager->persist($task);
|
|
|
|
$taskSubscriber = new ScheduledTaskSubscriberEntity($task, $subscriber);
|
|
$this->entityManager->persist($taskSubscriber);
|
|
|
|
$queue = new SendingQueueEntity();
|
|
$queue->setTask($task);
|
|
$queue->setMeta($meta);
|
|
$queue->setNewsletter($email);
|
|
$queue->setCountToProcess(1);
|
|
$queue->setCountTotal(1);
|
|
$this->entityManager->persist($queue);
|
|
|
|
$this->entityManager->flush();
|
|
return $task;
|
|
}
|
|
}
|