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 / AbstractAutomationEmbed.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 5 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
AbstractAutomationEmbed.php
208 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\Automation\Engine\Control\SubjectTransformerHandler;
10 use MailPoet\Automation\Engine\Data\Field;
11 use MailPoet\Automation\Engine\Integration\Trigger;
12 use MailPoet\Automation\Engine\Registry;
13 use MailPoet\Config\Renderer;
14 use MailPoet\Config\ServicesChecker;
15 use MailPoet\Settings\TrackingConfig;
16 use MailPoet\Util\License\Features\CapabilitiesManager;
17 use MailPoet\Util\License\Features\Subscribers as SubscribersFeature;
18 use MailPoet\WooCommerce\Helper as WooCommerceHelper;
19 use MailPoet\WooCommerce\WooCommerceBookings\Helper as WooCommerceBookingsHelper;
20 use MailPoet\WooCommerce\WooCommerceSubscriptions\Helper as WooCommerceSubscriptionsHelper;
21 use MailPoet\WP\Functions as WPFunctions;
22
23 abstract class AbstractAutomationEmbed {
24 protected AssetsController $assetsController;
25 protected Registry $registry;
26 protected Renderer $renderer;
27 protected TrackingConfig $trackingConfig;
28 protected WPFunctions $wp;
29 protected SubscribersFeature $subscribersFeature;
30 protected CapabilitiesManager $capabilitiesManager;
31 protected ServicesChecker $servicesChecker;
32 protected WooCommerceHelper $wooCommerceHelper;
33 protected WooCommerceSubscriptionsHelper $wooCommerceSubscriptionsHelper;
34 protected WooCommerceBookingsHelper $wooCommerceBookingsHelper;
35 protected SubjectTransformerHandler $subjectTransformerHandler;
36
37 public function __construct(
38 AssetsController $assetsController,
39 Registry $registry,
40 Renderer $renderer,
41 TrackingConfig $trackingConfig,
42 WPFunctions $wp,
43 SubscribersFeature $subscribersFeature,
44 CapabilitiesManager $capabilitiesManager,
45 ServicesChecker $servicesChecker,
46 WooCommerceHelper $wooCommerceHelper,
47 WooCommerceSubscriptionsHelper $wooCommerceSubscriptionsHelper,
48 WooCommerceBookingsHelper $wooCommerceBookingsHelper,
49 SubjectTransformerHandler $subjectTransformerHandler
50 ) {
51 $this->assetsController = $assetsController;
52 $this->registry = $registry;
53 $this->renderer = $renderer;
54 $this->trackingConfig = $trackingConfig;
55 $this->wp = $wp;
56 $this->subscribersFeature = $subscribersFeature;
57 $this->capabilitiesManager = $capabilitiesManager;
58 $this->servicesChecker = $servicesChecker;
59 $this->wooCommerceHelper = $wooCommerceHelper;
60 $this->wooCommerceSubscriptionsHelper = $wooCommerceSubscriptionsHelper;
61 $this->wooCommerceBookingsHelper = $wooCommerceBookingsHelper;
62 $this->subjectTransformerHandler = $subjectTransformerHandler;
63 }
64
65 abstract public function render(): void;
66
67 abstract protected function setupDependencies(): void;
68
69 abstract protected function getTemplateName(): string;
70
71 abstract protected function getCustomData(): array;
72
73 protected function renderEmbed(): void {
74 $this->disableAdminBarAndEmojis();
75 $this->setupDependencies();
76
77 $headContent = $this->captureHead();
78 $footerContent = $this->captureFooter();
79
80 $data = array_merge(
81 $this->getBaseData(),
82 $this->getCustomData(),
83 [
84 'head_content' => $headContent,
85 'footer_content' => $footerContent,
86 ]
87 );
88
89 // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
90 echo $this->renderer->render($this->getTemplateName(), $data);
91 exit;
92 }
93
94 protected function disableAdminBarAndEmojis(): void {
95 // Disable admin bar for embed (intentional for iframe display)
96 // phpcs:ignore WordPressVIPMinimum.UserExperience.AdminBarRemoval.RemovalDetected
97 add_filter('show_admin_bar', '__return_false');
98
99 // Disable WordPress emoji handling (prevents deprecation warning)
100 remove_action('wp_head', 'print_emoji_detection_script', 7);
101 remove_action('wp_print_styles', 'print_emoji_styles');
102 remove_action('admin_print_scripts', 'print_emoji_detection_script');
103 remove_action('admin_print_styles', 'print_emoji_styles');
104 }
105
106 protected function captureHead(): string {
107 ob_start();
108 wp_head();
109 return (string)ob_get_clean();
110 }
111
112 protected function captureFooter(): string {
113 ob_start();
114 wp_footer();
115 return (string)ob_get_clean();
116 }
117
118 protected function getBaseData(): array {
119 return [
120 'locale' => $this->wp->getLocale(),
121 'api' => [
122 'root' => rtrim($this->wp->escUrlRaw($this->wp->restUrl()), '/'),
123 'nonce' => $this->wp->wpCreateNonce('wp_rest'),
124 ],
125 'registry' => $this->buildRegistry(),
126 'context' => $this->buildContext(),
127 'tracking_config' => $this->trackingConfig->getConfig(),
128 'has_valid_premium_key' => $this->subscribersFeature->hasValidPremiumKey(),
129 'subscribers_limit_reached' => $this->subscribersFeature->check(),
130 'premium_active' => $this->servicesChecker->isPremiumPluginActive(),
131 'capabilities' => $this->capabilitiesManager->getCapabilities(),
132 'woocommerce_active' => $this->wooCommerceHelper->isWooCommerceActive(),
133 'woocommerce_subscriptions_active' => $this->wooCommerceSubscriptionsHelper->isWooCommerceSubscriptionsActive(),
134 'woocommerce_bookings_active' => $this->wooCommerceBookingsHelper->isWooCommerceBookingsActive(),
135 'woocommerce_store_config' => $this->wooCommerceHelper->isWooCommerceActive() ? $this->wooCommerceHelper->getWoocommerceStoreConfig() : null,
136 ];
137 }
138
139 protected function buildRegistry(): array {
140 $steps = [];
141 foreach ($this->registry->getSteps() as $key => $step) {
142 $steps[$key] = [
143 'key' => $step->getKey(),
144 'name' => $step->getName(),
145 'subject_keys' => $step instanceof Trigger ? $this->subjectTransformerHandler->getSubjectKeysForTrigger($step) : $step->getSubjectKeys(),
146 'args_schema' => $step->getArgsSchema()->toArray(),
147 ];
148 }
149
150 $subjects = [];
151 foreach ($this->registry->getSubjects() as $key => $subject) {
152 $subjectFields = $subject->getFields();
153 usort($subjectFields, function (Field $a, Field $b) {
154 return $a->getName() <=> $b->getName();
155 });
156
157 $subjects[$key] = [
158 'key' => $subject->getKey(),
159 'name' => $subject->getName(),
160 'args_schema' => $subject->getArgsSchema()->toArray(),
161 'field_keys' => array_map(function ($field) {
162 return $field->getKey();
163 }, $subjectFields),
164 ];
165 }
166
167 $fields = [];
168 foreach ($this->registry->getFields() as $key => $field) {
169 $fields[$key] = [
170 'key' => $field->getKey(),
171 'type' => $field->getType(),
172 'name' => $field->getName(),
173 'args' => $field->getArgs(),
174 ];
175 }
176
177 $filters = [];
178 foreach ($this->registry->getFilters() as $fieldType => $filter) {
179 $conditions = [];
180 foreach ($filter->getConditions() as $key => $label) {
181 $conditions[] = [
182 'key' => $key,
183 'label' => $label,
184 ];
185 }
186 $filters[$fieldType] = [
187 'field_type' => $filter->getFieldType(),
188 'conditions' => $conditions,
189 ];
190 }
191
192 return [
193 'steps' => $steps,
194 'subjects' => $subjects,
195 'fields' => $fields,
196 'filters' => $filters,
197 ];
198 }
199
200 protected function buildContext(): array {
201 $data = [];
202 foreach ($this->registry->getContextFactories() as $key => $factory) {
203 $data[$key] = $factory();
204 }
205 return $data;
206 }
207 }
208