Add Doctrine entities for sending queues and scheduled tasks

[MAILPOET-2216]
This commit is contained in:
Jan Jakeš
2019-07-25 16:11:44 +02:00
committed by M. Shull
parent eb837c8e36
commit 91dd0aa910
5 changed files with 383 additions and 13 deletions

View File

@ -127,6 +127,12 @@ class NewsletterEntity {
*/
private $options;
/**
* @OneToOne(targetEntity="MailPoet\Entities\SendingQueueEntity", mappedBy="newsletter")
* @var SendingQueueEntity|null
*/
private $queue;
function __construct() {
$this->newsletter_segments = new ArrayCollection();
$this->options = new ArrayCollection();
@ -327,4 +333,18 @@ class NewsletterEntity {
function getOptions() {
return $this->options;
}
/**
* @return SendingQueueEntity|null
*/
function getQueue() {
return $this->queue;
}
/**
* @param SendingQueueEntity|null $queue
*/
function setQueue($queue) {
$this->queue = $queue;
}
}

View File

@ -0,0 +1,148 @@
<?php
namespace MailPoet\Entities;
use DateTimeInterface;
use MailPoet\Doctrine\EntityTraits\AutoincrementedIdTrait;
use MailPoet\Doctrine\EntityTraits\CreatedAtTrait;
use MailPoet\Doctrine\EntityTraits\DeletedAtTrait;
use MailPoet\Doctrine\EntityTraits\UpdatedAtTrait;
/**
* @Entity()
* @Table(name="scheduled_tasks")
*/
class ScheduledTaskEntity {
const STATUS_COMPLETED = 'completed';
const STATUS_SCHEDULED = 'scheduled';
const STATUS_PAUSED = 'paused';
const VIRTUAL_STATUS_RUNNING = 'running'; // For historical reasons this is stored as null in DB
const PRIORITY_HIGH = 1;
const PRIORITY_MEDIUM = 5;
const PRIORITY_LOW = 10;
use AutoincrementedIdTrait;
use CreatedAtTrait;
use UpdatedAtTrait;
use DeletedAtTrait;
/**
* @Column(type="string")
* @var string|null
*/
private $type;
/**
* @Column(type="string")
* @var string|null
*/
private $status;
/**
* @Column(type="integer")
* @var int
*/
private $priority = 0;
/**
* @Column(type="datetimetz")
* @var DateTimeInterface|null
*/
private $scheduled_at;
/**
* @Column(type="datetimetz")
* @var DateTimeInterface|null
*/
private $processed_at;
/**
* @Column(type="json")
* @var array|null
*/
private $meta;
/**
* @return string|null
*/
function getType() {
return $this->type;
}
/**
* @param string|null $type
*/
function setType($type) {
$this->type = $type;
}
/**
* @return string|null
*/
function getStatus() {
return $this->status;
}
/**
* @param string|null $status
*/
function setStatus($status) {
$this->status = $status;
}
/**
* @return int
*/
function getPriority() {
return $this->priority;
}
/**
* @param int $priority
*/
function setPriority($priority) {
$this->priority = $priority;
}
/**
* @return DateTimeInterface|null
*/
function getScheduledAt() {
return $this->scheduled_at;
}
/**
* @param DateTimeInterface|null $scheduled_at
*/
function setScheduledAt($scheduled_at) {
$this->scheduled_at = $scheduled_at;
}
/**
* @return DateTimeInterface|null
*/
function getProcessedAt() {
return $this->processed_at;
}
/**
* @param DateTimeInterface|null $processed_at
*/
function setProcessedAt($processed_at) {
$this->processed_at = $processed_at;
}
/**
* @return array|null
*/
function getMeta() {
return $this->meta;
}
/**
* @param array|null $meta
*/
function setMeta($meta) {
$this->meta = $meta;
}
}

View File

@ -0,0 +1,200 @@
<?php
namespace MailPoet\Entities;
use MailPoet\Doctrine\EntityTraits\AutoincrementedIdTrait;
use MailPoet\Doctrine\EntityTraits\CreatedAtTrait;
use MailPoet\Doctrine\EntityTraits\DeletedAtTrait;
use MailPoet\Doctrine\EntityTraits\UpdatedAtTrait;
/**
* @Entity()
* @Table(name="sending_queues")
*/
class SendingQueueEntity {
const STATUS_COMPLETED = 'completed';
const STATUS_SCHEDULED = 'scheduled';
const STATUS_PAUSED = 'paused';
const PRIORITY_HIGH = 1;
const PRIORITY_MEDIUM = 5;
const PRIORITY_LOW = 10;
use AutoincrementedIdTrait;
use CreatedAtTrait;
use UpdatedAtTrait;
use DeletedAtTrait;
/**
* @Column(type="json_or_serialized")
* @var array|null
*/
private $newsletter_rendered_body;
/**
* @Column(type="string")
* @var string|null
*/
private $newsletter_rendered_subject;
/**
* @Column(type="text")
* @var string|null
*/
private $subscribers;
/**
* @Column(type="integer")
* @var int
*/
private $count_total = 0;
/**
* @Column(type="integer")
* @var int
*/
private $count_processed = 0;
/**
* @Column(type="integer")
* @var int
*/
private $count_to_process = 0;
/**
* @Column(type="json")
* @var array|null
*/
private $meta;
/**
* @OneToOne(targetEntity="MailPoet\Entities\ScheduledTaskEntity")
* @var ScheduledTaskEntity
*/
private $task;
/**
* @OneToOne(targetEntity="MailPoet\Entities\NewsletterEntity", inversedBy="sending_queue")
* @var NewsletterEntity
*/
private $newsletter;
/**
* @return array|null
*/
function getNewsletterRenderedBody() {
return $this->newsletter_rendered_body;
}
/**
* @param array|null $newsletter_rendered_body
*/
function setNewsletterRenderedBody($newsletter_rendered_body) {
$this->newsletter_rendered_body = $newsletter_rendered_body;
}
/**
* @return string|null
*/
function getNewsletterRenderedSubject() {
return $this->newsletter_rendered_subject;
}
/**
* @param string|null $newsletter_rendered_subject
*/
function setNewsletterRenderedSubject($newsletter_rendered_subject) {
$this->newsletter_rendered_subject = $newsletter_rendered_subject;
}
/**
* @return string|null
*/
function getSubscribers() {
return $this->subscribers;
}
/**
* @param string|null $subscribers
*/
function setSubscribers($subscribers) {
$this->subscribers = $subscribers;
}
/**
* @return int
*/
function getCountTotal() {
return $this->count_total;
}
/**
* @param int $count_total
*/
function setCountTotal($count_total) {
$this->count_total = $count_total;
}
/**
* @return int
*/
function getCountProcessed() {
return $this->count_processed;
}
/**
* @param int $count_processed
*/
function setCountProcessed($count_processed) {
$this->count_processed = $count_processed;
}
/**
* @return int
*/
function getCountToProcess() {
return $this->count_to_process;
}
/**
* @param int $count_to_process
*/
function setCountToProcess($count_to_process) {
$this->count_to_process = $count_to_process;
}
/**
* @return array|null
*/
function getMeta() {
return $this->meta;
}
/**
* @param array|null $meta
*/
function setMeta($meta) {
$this->meta = $meta;
}
/**
* @return ScheduledTaskEntity
*/
function getTask() {
return $this->task;
}
function setTask(ScheduledTaskEntity $task) {
$this->task = $task;
}
/**
* @return NewsletterEntity
*/
function getNewsletter() {
return $this->newsletter;
}
function setNewsletter(NewsletterEntity $newsletter) {
$this->newsletter = $newsletter;
}
}

View File

@ -3,6 +3,7 @@
namespace MailPoet\Models;
use Carbon\Carbon;
use MailPoet\Entities\ScheduledTaskEntity;
use MailPoet\Util\Helpers;
use MailPoet\WP\Functions as WPFunctions;
@ -20,13 +21,13 @@ if (!defined('ABSPATH')) exit;
*/
class ScheduledTask extends Model {
public static $_table = MP_SCHEDULED_TASKS_TABLE;
const STATUS_COMPLETED = 'completed';
const STATUS_SCHEDULED = 'scheduled';
const STATUS_PAUSED = 'paused';
const VIRTUAL_STATUS_RUNNING = 'running'; // For historical reasons this is stored as null in DB
const PRIORITY_HIGH = 1;
const PRIORITY_MEDIUM = 5;
const PRIORITY_LOW = 10;
const STATUS_COMPLETED = ScheduledTaskEntity::STATUS_COMPLETED;
const STATUS_SCHEDULED = ScheduledTaskEntity::STATUS_SCHEDULED;
const STATUS_PAUSED = ScheduledTaskEntity::STATUS_PAUSED;
const VIRTUAL_STATUS_RUNNING = ScheduledTaskEntity::VIRTUAL_STATUS_RUNNING; // For historical reasons this is stored as null in DB
const PRIORITY_HIGH = ScheduledTaskEntity::PRIORITY_HIGH;
const PRIORITY_MEDIUM = ScheduledTaskEntity::PRIORITY_MEDIUM;
const PRIORITY_LOW = ScheduledTaskEntity::PRIORITY_LOW;
const BASIC_RESCHEDULE_TIMEOUT = 5; //minutes
const MAX_RESCHEDULE_TIMEOUT = 1440; //minutes

View File

@ -1,6 +1,7 @@
<?php
namespace MailPoet\Models;
use MailPoet\Entities\SendingQueueEntity;
use MailPoet\Util\Helpers;
use MailPoet\WP\Emoji;
use MailPoet\Tasks\Subscribers as TaskSubscribers;
@ -23,12 +24,12 @@ if (!defined('ABSPATH')) exit;
class SendingQueue extends Model {
public static $_table = MP_SENDING_QUEUES_TABLE;
const STATUS_COMPLETED = 'completed';
const STATUS_SCHEDULED = 'scheduled';
const STATUS_PAUSED = 'paused';
const PRIORITY_HIGH = 1;
const PRIORITY_MEDIUM = 5;
const PRIORITY_LOW = 10;
const STATUS_COMPLETED = SendingQueueEntity::STATUS_COMPLETED;
const STATUS_SCHEDULED = SendingQueueEntity::STATUS_SCHEDULED;
const STATUS_PAUSED = SendingQueueEntity::STATUS_PAUSED;
const PRIORITY_HIGH = SendingQueueEntity::PRIORITY_HIGH;
const PRIORITY_MEDIUM = SendingQueueEntity::PRIORITY_MEDIUM;
const PRIORITY_LOW = SendingQueueEntity::PRIORITY_LOW;
private $emoji;