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 / Validation / AutomationRules / ValidStepRule.php
mailpoet / lib / Automation / Engine / Validation / AutomationRules Last commit date
AtLeastOneTriggerRule.php 3 years ago ConsistentStepMapRule.php 3 years ago NoCycleRule.php 2 years ago NoDuplicateEdgesRule.php 2 years ago NoJoinRule.php 2 years ago NoUnreachableStepsRule.php 2 years ago TriggerNeedsToBeFollowedByActionRule.php 2 years ago TriggersUnderRootRule.php 2 years ago UnknownStepRule.php 3 years ago ValidStepArgsRule.php 3 years ago ValidStepFiltersRule.php 2 years ago ValidStepOrderRule.php 3 years ago ValidStepRule.php 2 months ago ValidStepValidationRule.php 3 years ago index.php 3 years ago
ValidStepRule.php
140 lines
1 <?php declare(strict_types = 1);
2
3 namespace MailPoet\Automation\Engine\Validation\AutomationRules;
4
5 if (!defined('ABSPATH')) exit;
6
7
8 use MailPoet\Automation\Engine\Data\Automation;
9 use MailPoet\Automation\Engine\Exceptions;
10 use MailPoet\Automation\Engine\Exceptions\UnexpectedValueException;
11 use MailPoet\Automation\Engine\Validation\AutomationGraph\AutomationNode;
12 use MailPoet\Automation\Engine\Validation\AutomationGraph\AutomationNodeVisitor;
13 use MailPoet\Validator\ValidationException;
14 use Throwable;
15
16 class ValidStepRule implements AutomationNodeVisitor {
17 /** @var AutomationNodeVisitor[] */
18 private $rules;
19
20 /** @var array<string, array{step_id: string, message?: string, fields: array<string, string>, filters: array<string, string>}> */
21 private $errors = [];
22
23 /** @param AutomationNodeVisitor[] $rules */
24 public function __construct(
25 array $rules
26 ) {
27 $this->rules = $rules;
28 }
29
30 public function initialize(Automation $automation): void {
31 if (!$automation->needsFullValidation()) {
32 return;
33 }
34
35 foreach ($this->rules as $rule) {
36 $rule->initialize($automation);
37 }
38 }
39
40 public function visitNode(Automation $automation, AutomationNode $node): void {
41 if (!$automation->needsFullValidation()) {
42 return;
43 }
44
45 foreach ($this->rules as $rule) {
46 $stepId = $node->getStep()->getId();
47 try {
48 $rule->visitNode($automation, $node);
49 } catch (UnexpectedValueException $e) {
50 if (!isset($this->errors[$stepId])) {
51 $this->errors[$stepId] = ['step_id' => $stepId, 'message' => $e->getMessage(), 'fields' => [], 'filters' => []];
52 }
53 $this->errors[$stepId]['fields'] = array_merge(
54 $this->mapErrorCodesToErrorMessages($e->getErrors()),
55 $this->errors[$stepId]['fields']
56 );
57 } catch (ValidationException $e) {
58 if (!isset($this->errors[$stepId])) {
59 $this->errors[$stepId] = ['step_id' => $stepId, 'message' => $e->getMessage(), 'fields' => [], 'filters' => []];
60 }
61
62 $key = $rule instanceof ValidStepFiltersRule ? 'filters' : 'fields';
63 $this->errors[$stepId][$key] = array_merge(
64 $this->mapErrorCodesToErrorMessages($e->getErrors()),
65 $this->errors[$stepId][$key]
66 );
67 } catch (Throwable $e) {
68 if (!isset($this->errors[$stepId])) {
69 $this->errors[$stepId] = ['step_id' => $stepId, 'message' => __('Unknown error.', 'mailpoet'), 'fields' => [], 'filters' => []];
70 }
71 }
72 }
73 }
74
75 private function mapErrorCodesToErrorMessages(array $errorCodes): array {
76
77 return array_map(
78 function(string $errorCode): string {
79 switch ($errorCode) {
80 case "rest_property_required":
81 return __('This is a required field.', 'mailpoet');
82 case "rest_additional_properties_forbidden":
83 case "rest_too_few_properties":
84 case "rest_too_many_properties":
85 return "";
86 case "rest_invalid_type":
87 case "rest_invalid_multiple":
88 case "rest_not_in_enum":
89 return __('This field is not well formed.', 'mailpoet');
90 case "rest_too_few_items":
91 return __('Please add more items.', 'mailpoet');
92 case "rest_too_many_items":
93 return __('Please remove some items.', 'mailpoet');
94 case "rest_duplicate_items":
95 return __('Please remove duplicate items.', 'mailpoet');
96 case "rest_out_of_bounds":
97 return __('This value is out of bounds.', 'mailpoet');
98 case "rest_too_short":
99 return __('This value is not long enough.', 'mailpoet');
100 case "rest_too_long":
101 return __('This value is too long.', 'mailpoet');
102 case "rest_invalid_pattern":
103 return __('This value is not well formed.', 'mailpoet');
104 case "rest_no_matching_schema":
105 return __('This value does not match the expected format.', 'mailpoet');
106 case "rest_one_of_multiple_matches":
107 return __('This value is not matching the correct times.', 'mailpoet');
108 case "rest_invalid_hex_color":
109 return __('This value is not a hex formatted color.', 'mailpoet');
110 case "rest_invalid_date":
111 return __('This value is not a date.', 'mailpoet');
112 case "rest_invalid_email":
113 return __('This value is not an email address.', 'mailpoet');
114 case "rest_invalid_ip":
115 return __('This value is not an IP address.', 'mailpoet');
116 case "rest_invalid_uuid":
117 return __('This value is not an UUID.', 'mailpoet');
118 default:
119 return $errorCode;
120 }
121 },
122 $errorCodes
123 );
124 }
125
126 public function complete(Automation $automation): void {
127 if (!$automation->needsFullValidation()) {
128 return;
129 }
130
131 foreach ($this->rules as $rule) {
132 $rule->complete($automation);
133 }
134
135 if ($this->errors) {
136 throw Exceptions::automationNotValid(__('Some steps are not valid', 'mailpoet'), $this->errors);
137 }
138 }
139 }
140