PluginProbe ʕ •ᴥ•ʔ
MailPoet – Newsletters, Email Marketing, and Automation / 5.34.2
MailPoet – Newsletters, Email Marketing, and Automation v5.34.2
5.34.2 5.34.1 5.34.0 5.33.1 5.33.0 5.32.0 5.31.0 5.30.0 5.29.0 5.28.1 5.28.0 5.27.0 5.26.0 5.26.1 5.25.0 5.24.0 4.43.0 4.43.1 4.44.0 4.44.1 4.45.0 4.46.0 4.47.0 4.48.0 4.48.1 4.48.2 4.49.0 4.49.1 4.5.0 4.5.1 4.5.2 4.50.0 4.50.1 4.51.0 4.51.1 4.51.2 4.52.0 4.53.0 4.54.0 4.55.0 4.56.0 4.57.0 4.58.0 4.58.1 4.58.2 4.6.0 4.6.1 4.6.2 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 5.0.0 5.0.1 5.0.2 5.1.0 5.1.1 5.10.0 5.10.1 5.11.0 5.12.0 5.12.1 5.12.10 5.12.11 5.12.12 5.12.13 5.12.2 5.12.3 5.12.4 5.12.5 5.12.6 5.12.7 5.12.8 5.12.9 5.13.0 5.13.1 5.13.2 5.14.0 5.14.1 5.14.2 5.14.3 5.15.0 5.15.1 5.16.0 5.16.1 5.16.2 5.16.3 5.16.4 5.17.0 5.17.1 5.17.2 5.17.3 5.17.4 5.17.5 5.17.6 5.18.0 5.19.0 5.2.0 5.2.1 5.2.2 5.2.3 5.20.0 5.21.0 5.21.1 5.21.2 5.21.3 5.22.0 5.22.1 5.22.2 5.22.3 5.22.4 5.23.0 5.23.1 5.23.2 5.3.0 5.3.1 5.3.2 5.3.3 5.3.4 5.3.5 5.3.6 5.3.7 5.4.0 5.4.1 5.4.2 5.5.0 5.5.1 5.5.2 5.6.0 5.6.1 5.6.2 5.6.3 5.6.4 5.7.0 5.7.1 5.8.0 5.8.1 5.9.0 3.0.0-beta.15 3.7.1 3.0.0-beta.16 3.7.2 3.0.0-beta.17 3.7.3 3.0.0-beta.18 3.7.4 3.0.0-beta.19 3.7.5 3.0.0-beta.2 3.7.6 3.0.0-beta.20 3.7.8 3.0.0-beta.21 3.70.0 3.0.0-beta.22 3.71.0 3.0.0-beta.23 3.71.1 3.0.0-beta.23.1 3.71.2 3.0.0-beta.23.2 3.71.3 3.0.0-beta.24 3.72.0 3.0.0-beta.25 3.73.0 3.0.0-beta.26 3.73.1 3.0.0-beta.27 3.73.2 3.0.0-beta.28 3.74.0 3.0.0-beta.29 3.74.1 3.0.0-beta.3 3.74.2 3.0.0-beta.30 3.74.3 3.0.0-beta.31 3.75.0 3.0.0-beta.32 3.75.1 3.0.0-beta.33 3.76.0 3.0.0-beta.33.1 3.77.0 3.0.0-beta.34.0.0 3.77.1 3.0.0-beta.36.0.0 3.78.0 3.0.0-beta.36.0.1 3.79.0 3.0.0-beta.36.2.0 3.8 3.0.0-beta.36.3.0 3.8.1 3.0.0-beta.36.3.1 3.8.2 3.0.0-beta.37.0.0 3.8.3 3.0.0-beta.4 3.8.4 3.0.0-beta.5 3.8.5 3.0.0-beta.6 3.8.6 3.0.0-beta.7 3.80.0 3.0.0-beta.7.1 3.81.0 3.0.0-beta.8 3.82.0 3.0.0-beta.9 3.83.0 3.0.0-rc.1.0.0 3.84.0 3.0.0-rc.1.0.1 3.84.1 3.0.0-rc.1.0.2 3.85.0 3.0.0-rc.1.0.3 3.85.1 3.0.0-rc.1.0.4 3.86.0 3.0.0-rc.2.0.0 3.87.0 3.0.0-rc.2.0.1 3.87.1 3.0.0-rc.2.0.2 3.87.2 3.0.0-rc.2.0.3 3.88.0 3.0.1 3.88.1 3.0.2 3.88.2 3.0.3 3.89.0 3.0.4 3.89.1 3.0.5 3.89.2 3.0.6 3.89.3 3.0.7 3.89.4 3.0.8 3.9.0 3.0.9 3.9.1 3.1.0 3.90.0 3.10 3.90.1 3.10.1 3.90.2 3.100.0 3.91.0 3.100.1 3.91.1 3.100.2 3.92.0 3.101.0 3.92.1 3.101.1 3.93.0 3.102.0 3.93.1 3.102.1 3.94.0 3.103.0 3.95.0 3.103.1 3.95.1 3.11.0 3.96.0 3.11.1 3.96.1 3.11.2 3.97.0 3.11.3 3.98.0 3.11.4 3.98.1 3.11.5 3.99.0 3.12.0 3.99.1 3.12.1 4.0.0 3.13.0 4.0.1 3.14.0 4.1.0 3.14.1 4.1.1 3.15.0 4.10.0 3.16.0 4.11.0 3.16.1 4.11.1 3.16.2 4.12.0 3.16.3 4.12.1 3.17.0 4.12.2 3.17.1 4.13.0 3.17.2 4.14.0 3.18.0 4.15.0 3.18.1 4.16.0 3.18.2 4.17.0 3.19.0 4.17.1 3.19.1 4.18.0 3.19.2 4.18.1 3.19.3 4.19.0 3.2.0 4.2.0 3.2.1 4.20.0 3.2.2 4.20.1 3.2.3 4.20.2 3.2.4 4.21.0 3.2.5 4.22.0 3.20.0 4.22.1 3.21.0 4.22.2 3.21.1 4.23.0 3.22.0 4.24.0 3.23.0 4.25.0 3.23.1 4.26.0 3.23.2 4.26.1 3.24.0 4.27.0 3.25.0 4.28.0 3.25.1 4.29.0 3.26.0 4.3.0 3.26.1 4.3.1 3.27.0 4.30.0 3.28.0 4.31.0 3.29.0 4.31.1 3.3.0 4.32.0 3.3.1 4.33.0 3.3.2 4.34.0 3.3.3 4.35.0 3.3.4 4.35.1 3.3.5 4.36.0 3.3.6 4.37.0 3.30.0 4.38.0 3.31.0 4.39.0 3.31.1 4.4.0 3.32.0 4.40.0 3.32.1 4.41.0 3.32.2 4.41.1 3.33.0 4.41.2 3.34.0 4.41.3 3.34.1 4.42.0 3.34.2 4.42.1 3.34.3 3.34.4 3.35.0 3.35.1 3.35.3 3.35.4 3.36.0 3.37.0 3.37.1 3.37.2 3.37.3 3.38.0 3.38.1 3.39.0 3.39.1 3.39.2 3.4.0 3.4.1 3.4.2 3.4.3 3.4.4 3.40.0 3.40.1 3.41.0 3.41.1 3.41.2 3.42.0 3.42.1 3.42.2 3.42.3 3.43.0 3.43.1 3.44.0 3.45.0 3.45.1 3.46.0 3.46.1 3.46.10 3.46.11 3.46.12 3.46.13 3.46.14 3.46.2 3.46.3 3.46.4 3.46.5 3.46.6 3.46.7 3.46.8 3.46.9 3.47.0 3.47.1 3.47.10 3.47.11 3.47.2 3.47.3 3.47.5 3.47.6 3.47.7 3.47.9 3.48.0 3.48.1 3.49.0 3.49.1 3.5.0 3.5.1 3.50.0 3.51.0 3.51.1 3.51.2 3.52.0 3.53.0 3.54.0 3.54.1 3.54.2 3.54.3 3.55.0 3.55.1 3.56.0 3.56.1 3.56.2 3.57.0 3.57.1 3.58.0 3.59.0 3.59.1 3.59.2 3.6.0 3.6.1 3.6.2 3.6.3 3.6.4 3.6.5 3.6.6 3.6.7 3.60.0 3.60.1 3.60.10 3.60.11 3.60.12 3.60.2 3.60.3 3.60.4 3.60.6 3.60.7 3.60.8 3.60.9 3.61.0 3.62.0 3.62.1 3.63.0 3.64.0 3.64.1 3.64.2 3.64.3 3.65.0 trunk 3.65.1 3.0.0 3.66.0 3.0.0-beta.1 3.67.0 3.0.0-beta.10 3.67.1 3.0.0-beta.11 3.68.0 3.0.0-beta.12 3.69.0 3.0.0-beta.13 3.69.1 3.0.0-beta.14 3.7.0
mailpoet / lib / Automation / Engine / Data / Automation.php
mailpoet / lib / Automation / Engine / Data Last commit date
Automation.php 2 months ago AutomationRun.php 1 year ago AutomationRunLog.php 1 year ago AutomationStatistics.php 9 months ago AutomationTemplate.php 6 months ago AutomationTemplateCategory.php 2 years ago Field.php 2 years ago Filter.php 3 years ago FilterGroup.php 2 months ago Filters.php 2 months ago NextStep.php 2 years ago Step.php 2 months ago StepRunArgs.php 2 years ago StepValidationArgs.php 3 years ago Subject.php 3 years ago SubjectEntry.php 3 years ago index.php 3 years ago
Automation.php
267 lines
1 <?php declare(strict_types = 1);
2
3 namespace MailPoet\Automation\Engine\Data;
4
5 if (!defined('ABSPATH')) exit;
6
7
8 use DateTimeImmutable;
9 use MailPoet\Automation\Engine\Exceptions\InvalidStateException;
10 use MailPoet\Automation\Engine\Utils\Json;
11
12 class Automation {
13 public const STATUS_ACTIVE = 'active';
14 public const STATUS_DEACTIVATING = 'deactivating';
15 public const STATUS_DRAFT = 'draft';
16 public const STATUS_TRASH = 'trash';
17 public const STATUS_ALL = [
18 self::STATUS_ACTIVE,
19 self::STATUS_DEACTIVATING,
20 self::STATUS_DRAFT,
21 self::STATUS_TRASH,
22 ];
23
24 /** @var int|null */
25 private $id;
26
27 /** @var int|null */
28 private $versionId;
29
30 /** @var string */
31 private $name;
32
33 /** @var \WP_User */
34 private $author;
35
36 /** @var string */
37 private $status = self::STATUS_DRAFT;
38
39 /** @var DateTimeImmutable */
40 private $createdAt;
41
42 /** @var DateTimeImmutable */
43 private $updatedAt;
44
45 /** @var ?DateTimeImmutable */
46 private $activatedAt = null;
47
48 /** @var array<string|int, Step> */
49 private $steps;
50
51 /** @var array<string, mixed> */
52 private $meta = [];
53
54 public function __clone() {
55 $this->author = clone $this->author;
56 $this->steps = array_map(function(Step $step): Step {
57 return clone $step;
58 }, $this->steps);
59 }
60
61 /** @param array<string, Step> $steps */
62 public function __construct(
63 string $name,
64 array $steps,
65 \WP_User $author,
66 ?int $id = null,
67 ?int $versionId = null
68 ) {
69 $this->name = $name;
70 $this->steps = $steps;
71 $this->author = $author;
72 $this->id = $id;
73 $this->versionId = $versionId;
74
75 $now = new DateTimeImmutable();
76 $this->createdAt = $now;
77 $this->updatedAt = $now;
78 }
79
80 public function getId(): int {
81 if ($this->id === null) {
82 throw InvalidStateException::create()->withMessage('No automation ID was set');
83 }
84 return $this->id;
85 }
86
87 public function setId(int $id): void {
88 $this->id = $id;
89 }
90
91 public function getVersionId(): int {
92 if (!$this->versionId) {
93 throw InvalidStateException::create()->withMessage('No automation version ID was set');
94 }
95 return $this->versionId;
96 }
97
98 public function getName(): string {
99 return $this->name;
100 }
101
102 public function setName(string $name): void {
103 $this->name = $name;
104 $this->setUpdatedAt();
105 }
106
107 public function getStatus(): string {
108 return $this->status;
109 }
110
111 public function setStatus(string $status): void {
112 if ($status === self::STATUS_ACTIVE && $this->status !== self::STATUS_ACTIVE) {
113 $this->activatedAt = new DateTimeImmutable();
114 }
115 $this->status = $status;
116 $this->setUpdatedAt();
117 }
118
119 public function getCreatedAt(): DateTimeImmutable {
120 return $this->createdAt;
121 }
122
123 public function setCreatedAt(DateTimeImmutable $createdAt): void {
124 $this->createdAt = $createdAt;
125 }
126
127 public function getAuthor(): \WP_User {
128 return $this->author;
129 }
130
131 public function getUpdatedAt(): DateTimeImmutable {
132 return $this->updatedAt;
133 }
134
135 public function getActivatedAt(): ?DateTimeImmutable {
136 return $this->activatedAt;
137 }
138
139 /** @return array<string|int, Step> */
140 public function getSteps(): array {
141 return $this->steps;
142 }
143
144 /**
145 * @return array<string|int, Step>
146 */
147 public function getTriggers(): array {
148 return array_filter(
149 $this->steps,
150 function (Step $step) {
151 return $step->getType() === Step::TYPE_TRIGGER;
152 }
153 );
154 }
155
156 /** @param array<string|int, Step> $steps */
157 public function setSteps(array $steps): void {
158 $this->steps = $steps;
159 $this->setUpdatedAt();
160 }
161
162 public function getStep(string $id): ?Step {
163 return $this->steps[$id] ?? null;
164 }
165
166 public function getTrigger(string $key): ?Step {
167 foreach ($this->steps as $step) {
168 if ($step->getType() === Step::TYPE_TRIGGER && $step->getKey() === $key) {
169 return $step;
170 }
171 }
172 return null;
173 }
174
175 public function equals(Automation $compare): bool {
176 $compareArray = $compare->toArray();
177 $currentArray = $this->toArray();
178 $ignoreValues = [
179 'created_at',
180 'updated_at',
181 ];
182 foreach ($ignoreValues as $ignore) {
183 unset($compareArray[$ignore]);
184 unset($currentArray[$ignore]);
185 }
186 return $compareArray === $currentArray;
187 }
188
189 public function needsFullValidation(): bool {
190 return in_array($this->status, [Automation::STATUS_ACTIVE, Automation::STATUS_DEACTIVATING], true);
191 }
192
193 public function toArray(): array {
194 return [
195 'id' => $this->id,
196 'name' => $this->name,
197 'status' => $this->status,
198 'author' => $this->author->ID,
199 'created_at' => $this->createdAt->format(DateTimeImmutable::W3C),
200 'updated_at' => $this->updatedAt->format(DateTimeImmutable::W3C),
201 'activated_at' => $this->activatedAt ? $this->activatedAt->format(DateTimeImmutable::W3C) : null,
202 'steps' => Json::encode(
203 array_map(function (Step $step) {
204 return $step->toArray();
205 }, $this->steps)
206 ),
207 'meta' => Json::encode($this->meta),
208 ];
209 }
210
211 private function setUpdatedAt(): void {
212 $this->updatedAt = new DateTimeImmutable();
213 }
214
215 /**
216 * @param string $key
217 * @return mixed|null
218 */
219 public function getMeta(string $key) {
220 return $this->meta[$key] ?? null;
221 }
222
223 public function getAllMetas(): array {
224 return $this->meta;
225 }
226
227 /**
228 * @param string $key
229 * @param mixed $value
230 * @return void
231 */
232 public function setMeta(string $key, $value): void {
233 $this->meta[$key] = $value;
234 $this->setUpdatedAt();
235 }
236
237 public function deleteMeta(string $key): void {
238 unset($this->meta[$key]);
239 $this->setUpdatedAt();
240 }
241
242 public function deleteAllMetas(): void {
243 $this->meta = [];
244 $this->setUpdatedAt();
245 }
246
247 public static function fromArray(array $data): self {
248 // TODO: validation
249 $automation = new self(
250 $data['name'],
251 array_map(function (array $stepData): Step {
252 return Step::fromArray($stepData);
253 }, Json::decode($data['steps'])),
254 new \WP_User((int)$data['author'])
255 );
256 $automation->id = (int)$data['id'];
257 $automation->versionId = (int)$data['version_id'];
258 $automation->status = $data['status'];
259 $automation->createdAt = new DateTimeImmutable($data['created_at']);
260 $automation->updatedAt = new DateTimeImmutable($data['updated_at']);
261 $automation->activatedAt = $data['activated_at'] !== null ? new DateTimeImmutable($data['activated_at']) : null;
262
263 $automation->meta = $data['meta'] ? Json::decode($data['meta']) : [];
264 return $automation;
265 }
266 }
267