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 / StepRunArgs.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
StepRunArgs.php
167 lines
1 <?php declare(strict_types = 1);
2
3 namespace MailPoet\Automation\Engine\Data;
4
5 if (!defined('ABSPATH')) exit;
6
7
8 use MailPoet\Automation\Engine\Exceptions;
9 use MailPoet\Automation\Engine\Exceptions\InvalidStateException;
10 use MailPoet\Automation\Engine\Integration\Payload;
11 use MailPoet\Automation\Engine\Integration\Subject;
12 use Throwable;
13
14 class StepRunArgs {
15 /** @var Automation */
16 private $automation;
17
18 /** @var AutomationRun */
19 private $automationRun;
20
21 /** @var Step */
22 private $step;
23
24 /** @var array<string, SubjectEntry<Subject<Payload>>[]> */
25 private $subjectEntries = [];
26
27 /** @var array<class-string, string> */
28 private $subjectKeyClassMap = [];
29
30 /** @var array<string, Field> */
31 private $fields = [];
32
33 /** @var array<string, string> */
34 private $fieldToSubjectMap = [];
35
36 /** @var int */
37 private $runNumber;
38
39 /** @param SubjectEntry<Subject<Payload>>[] $subjectsEntries */
40 public function __construct(
41 Automation $automation,
42 AutomationRun $automationRun,
43 Step $step,
44 array $subjectsEntries,
45 int $runNumber
46 ) {
47 $this->automation = $automation;
48 $this->step = $step;
49 $this->automationRun = $automationRun;
50 $this->runNumber = $runNumber;
51
52 foreach ($subjectsEntries as $entry) {
53 $subject = $entry->getSubject();
54 $key = $subject->getKey();
55 $this->subjectEntries[$key] = array_merge($this->subjectEntries[$key] ?? [], [$entry]);
56 $this->subjectKeyClassMap[get_class($subject)] = $key;
57
58 foreach ($subject->getFields() as $field) {
59 $this->fields[$field->getKey()] = $field;
60 $this->fieldToSubjectMap[$field->getKey()] = $key;
61 }
62 }
63 }
64
65 public function getAutomation(): Automation {
66 return $this->automation;
67 }
68
69 public function getAutomationRun(): AutomationRun {
70 return $this->automationRun;
71 }
72
73 public function getStep(): Step {
74 return $this->step;
75 }
76
77 /** @return array<string, SubjectEntry<Subject<Payload>>[]> */
78 public function getSubjectEntries(): array {
79 return $this->subjectEntries;
80 }
81
82 /** @return SubjectEntry<Subject<Payload>> */
83 public function getSingleSubjectEntry(string $key): SubjectEntry {
84 $subjects = $this->subjectEntries[$key] ?? [];
85 if (count($subjects) === 0) {
86 throw Exceptions::subjectDataNotFound($key, $this->automationRun->getId());
87 }
88 if (count($subjects) > 1) {
89 throw Exceptions::multipleSubjectsFound($key, $this->automationRun->getId());
90 }
91 return $subjects[0];
92 }
93
94 /**
95 * @template P of Payload
96 * @template S of Subject<P>
97 * @param class-string<S> $class
98 * @return SubjectEntry<S<P>>
99 */
100 public function getSingleSubjectEntryByClass(string $class): SubjectEntry {
101 $key = $this->subjectKeyClassMap[$class] ?? null;
102 if (!$key) {
103 throw Exceptions::subjectClassNotFound($class);
104 }
105
106 /** @var SubjectEntry<S<P>> $entry -- for PHPStan */
107 $entry = $this->getSingleSubjectEntry($key);
108 return $entry;
109 }
110
111 /**
112 * @template P of Payload
113 * @param class-string<P> $class
114 * @return P
115 */
116 public function getSinglePayloadByClass(string $class): Payload {
117 $payloads = [];
118 foreach ($this->subjectEntries as $entries) {
119 foreach ($entries as $entry) {
120 $payload = $entry->getPayload();
121 if (get_class($payload) === $class) {
122 $payloads[] = $payload;
123 }
124 }
125 }
126
127 if (count($payloads) === 0) {
128 throw Exceptions::payloadNotFound($class, $this->automationRun->getId());
129 }
130 if (count($payloads) > 1) {
131 throw Exceptions::multiplePayloadsFound($class, $this->automationRun->getId());
132 }
133
134 // ensure PHPStan we're indeed returning an instance of $class
135 $payload = $payloads[0];
136 if (!$payload instanceof $class) {
137 throw InvalidStateException::create();
138 }
139 return $payload;
140 }
141
142 /** @return mixed */
143 public function getFieldValue(string $key, array $params = []) {
144 $field = $this->fields[$key] ?? null;
145 $subjectKey = $this->fieldToSubjectMap[$key] ?? null;
146 if (!$field || !$subjectKey) {
147 throw Exceptions::fieldNotFound($key);
148 }
149
150 $entry = $this->getSingleSubjectEntry($subjectKey);
151 try {
152 $value = $field->getValue($entry->getPayload(), $params);
153 } catch (Throwable $e) {
154 throw Exceptions::fieldLoadFailed($field->getKey(), $field->getArgs());
155 }
156 return $value;
157 }
158
159 public function getRunNumber(): int {
160 return $this->runNumber;
161 }
162
163 public function isFirstRun(): bool {
164 return $this->runNumber === 1;
165 }
166 }
167