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 / AdminPages / Pages / AutomationEditor.php
mailpoet / lib / AdminPages / Pages Last commit date
AbstractAutomationEmbed.php 5 months ago Automation.php 2 years ago AutomationAnalytics.php 2 months ago AutomationEditor.php 2 months ago AutomationFlowEmbed.php 6 months ago AutomationPreviewEmbed.php 2 months ago AutomationTemplates.php 2 years ago CustomFields.php 2 months ago DynamicSegments.php 2 months ago ExperimentalFeatures.php 3 years ago FormEditor.php 1 week ago Forms.php 2 months ago Help.php 2 months ago Homepage.php 2 years ago Landingpage.php 2 years ago Logs.php 1 month ago NewsletterEditor.php 2 months ago Newsletters.php 2 months ago Settings.php 5 months ago StaticSegments.php 2 months ago Subscribers.php 1 week ago SubscribersExport.php 3 years ago SubscribersImport.php 2 months ago Tags.php 2 months ago Upgrade.php 1 year ago WelcomeWizard.php 2 months ago WooCommerceSetup.php 2 months ago index.php 3 years ago
AutomationEditor.php
177 lines
1 <?php declare(strict_types = 1);
2
3 namespace MailPoet\AdminPages\Pages;
4
5 if (!defined('ABSPATH')) exit;
6
7
8 use MailPoet\AdminPages\AssetsController;
9 use MailPoet\AdminPages\PageRenderer;
10 use MailPoet\Automation\Engine\Control\SubjectTransformerHandler;
11 use MailPoet\Automation\Engine\Data\Automation;
12 use MailPoet\Automation\Engine\Data\Field;
13 use MailPoet\Automation\Engine\Hooks;
14 use MailPoet\Automation\Engine\Integration\Trigger;
15 use MailPoet\Automation\Engine\Mappers\AutomationMapper;
16 use MailPoet\Automation\Engine\Registry;
17 use MailPoet\Automation\Engine\Storage\AutomationStorage;
18 use MailPoet\WP\Functions as WPFunctions;
19 use MailPoet\WP\Notice as WPNotice;
20 use MailPoet\WPCOM\DotcomHelperFunctions;
21
22 class AutomationEditor {
23 /** @var AssetsController */
24 private $assetsController;
25
26 /** @var AutomationMapper */
27 private $automationMapper;
28
29 /** @var AutomationStorage */
30 private $automationStorage;
31
32 /** @var PageRenderer */
33 private $pageRenderer;
34
35 /** @var Registry */
36 private $registry;
37
38 /** @var WPFunctions */
39 private $wp;
40
41 /** @var SubjectTransformerHandler */
42 private $subjectTransformerHandler;
43
44 /** @var DotcomHelperFunctions */
45 private $dotcomHelperFunctions;
46
47 public function __construct(
48 AssetsController $assetsController,
49 AutomationMapper $automationMapper,
50 AutomationStorage $automationStorage,
51 PageRenderer $pageRenderer,
52 Registry $registry,
53 WPFunctions $wp,
54 SubjectTransformerHandler $subjectTransformerHandler,
55 DotcomHelperFunctions $dotcomHelperFunctions
56 ) {
57 $this->assetsController = $assetsController;
58 $this->automationMapper = $automationMapper;
59 $this->automationStorage = $automationStorage;
60 $this->pageRenderer = $pageRenderer;
61 $this->registry = $registry;
62 $this->wp = $wp;
63 $this->subjectTransformerHandler = $subjectTransformerHandler;
64 $this->dotcomHelperFunctions = $dotcomHelperFunctions;
65 }
66
67 public function render() {
68 $this->assetsController->setupAutomationEditorDependencies();
69
70 $id = isset($_GET['id']) && is_numeric($_GET['id']) ? (int)$_GET['id'] : null;
71
72 $this->wp->doAction(Hooks::EDITOR_BEFORE_LOAD, (int)$id);
73
74 $automation = $id ? $this->automationStorage->getAutomation($id) : null;
75 if (!$automation) {
76 $notice = new WPNotice(
77 WPNotice::TYPE_ERROR,
78 __('Automation not found.', 'mailpoet')
79 );
80 $notice->displayWPNotice();
81 $this->pageRenderer->displayPage('blank.html');
82 return;
83 }
84
85 if ($automation->getStatus() === Automation::STATUS_TRASH) {
86 $this->wp->wpSafeRedirect($this->wp->adminUrl('admin.php?page=mailpoet-automation&status=trash&notice=had-been-deleted'));
87 exit();
88 }
89
90 $this->pageRenderer->displayPage('automation/editor.html', [
91 'registry' => $this->buildRegistry(),
92 'context' => $this->buildContext(),
93 'automation' => $this->automationMapper->buildAutomation($automation),
94 'locale_full' => $this->wp->getLocale(),
95 'api' => [
96 'root' => rtrim($this->wp->escUrlRaw($this->wp->restUrl()), '/'),
97 'nonce' => $this->wp->wpCreateNonce('wp_rest'),
98 ],
99 'jsonapi' => [
100 'root' => rtrim($this->wp->escUrlRaw(admin_url('admin-ajax.php')), '/'),
101 ],
102 ]);
103 }
104
105 private function buildRegistry(): array {
106 $steps = [];
107 foreach ($this->registry->getSteps() as $key => $step) {
108 $steps[$key] = [
109 'key' => $step->getKey(),
110 'name' => $step->getName(),
111 'subject_keys' => $step instanceof Trigger ? $this->subjectTransformerHandler->getSubjectKeysForTrigger($step) : $step->getSubjectKeys(),
112 'args_schema' => $step->getArgsSchema()->toArray(),
113 ];
114 }
115
116 $subjects = [];
117 foreach ($this->registry->getSubjects() as $key => $subject) {
118 $subjectFields = $subject->getFields();
119 usort($subjectFields, function (Field $a, Field $b) {
120 return $a->getName() <=> $b->getName();
121 });
122
123 $subjects[$key] = [
124 'key' => $subject->getKey(),
125 'name' => $subject->getName(),
126 'args_schema' => $subject->getArgsSchema()->toArray(),
127 'field_keys' => array_map(function ($field) {
128 return $field->getKey();
129 }, $subjectFields),
130 ];
131 }
132
133 $fields = [];
134 foreach ($this->registry->getFields() as $key => $field) {
135 $fields[$key] = [
136 'key' => $field->getKey(),
137 'type' => $field->getType(),
138 'name' => $field->getName(),
139 'args' => $field->getArgs(),
140 ];
141 }
142
143 $filters = [];
144 foreach ($this->registry->getFilters() as $fieldType => $filter) {
145 $conditions = [];
146 foreach ($filter->getConditions() as $key => $label) {
147 $conditions[] = [
148 'key' => $key,
149 'label' => $label,
150 ];
151 }
152 $filters[$fieldType] = [
153 'field_type' => $filter->getFieldType(),
154 'conditions' => $conditions,
155 ];
156 }
157
158 return [
159 'steps' => $steps,
160 'subjects' => $subjects,
161 'fields' => $fields,
162 'filters' => $filters,
163 ];
164 }
165
166 private function buildContext(): array {
167 $data = [];
168 foreach ($this->registry->getContextFactories() as $key => $factory) {
169 $data[$key] = $factory();
170 }
171
172 $data['is_garden'] = $this->dotcomHelperFunctions->isGarden();
173
174 return $data;
175 }
176 }
177