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 / Form / PreviewPage.php
mailpoet / lib / Form Last commit date
Block 1 week ago Listing 1 month ago RestApi 1 month ago Templates 2 years ago Util 2 months ago ApiDataSanitizer.php 2 weeks ago AssetsController.php 2 months ago BlockStylesRenderer.php 3 years ago BlockWrapperRenderer.php 3 years ago BlocksRenderer.php 1 week ago DisplayFormInWPContent.php 2 months ago FormHtmlSanitizer.php 1 month ago FormMessageController.php 4 years ago FormSaveController.php 1 year ago FormsRepository.php 1 year ago PreviewPage.php 2 months ago PreviewWidget.php 1 year ago Renderer.php 2 months ago Widget.php 2 months ago index.php 3 years ago
PreviewPage.php
130 lines
1 <?php // phpcs:ignore SlevomatCodingStandard.TypeHints.DeclareStrictTypes.DeclareStrictTypesMissing
2
3 namespace MailPoet\Form;
4
5 if (!defined('ABSPATH')) exit;
6
7
8 use MailPoet\Config\Renderer as TemplateRenderer;
9 use MailPoet\Entities\FormEntity;
10 use MailPoet\WP\Functions as WPFunctions;
11
12 class PreviewPage {
13 const PREVIEW_DATA_TRANSIENT_PREFIX = 'mailpoet_form_preview_';
14 const PREVIEW_DATA_EXPIRATION = 84600; // 1 DAY
15
16 /** @var WPFunctions */
17 private $wp;
18
19 /** @var Renderer */
20 private $formRenderer;
21
22 /** @var TemplateRenderer */
23 private $templateRenderer;
24
25 /** @var FormsRepository */
26 private $formRepository;
27
28 /** @var AssetsController */
29 private $assetsController;
30
31 public function __construct(
32 WPFunctions $wp,
33 Renderer $formRenderer,
34 TemplateRenderer $templateRenderer,
35 FormsRepository $formRepository,
36 AssetsController $assetsController
37 ) {
38 $this->wp = $wp;
39 $this->formRenderer = $formRenderer;
40 $this->templateRenderer = $templateRenderer;
41 $this->formRepository = $formRepository;
42 $this->assetsController = $assetsController;
43 }
44
45 public function renderPage(int $formId, string $formType, string $editorUrl): string {
46 $this->assetsController->setupFormPreviewDependencies();
47 $formData = $this->fetchFormData($formId);
48 if (!$formData instanceof FormEntity) {
49 return '';
50 }
51 return $this->templateRenderer->render(
52 'form/form_preview.html',
53 [
54 'post' => $this->getPostContent(),
55 'form' => $this->getFormContent($formData, $formId, $formType, $editorUrl),
56 'formType' => $formType,
57 ]
58 );
59 }
60
61 public function renderTitle($title = null, $id = null) {
62 if ($id !== $this->wp->getTheId()) {
63 return $title;
64 }
65 return __('Sample page to preview your form', 'mailpoet');
66 }
67
68 private function fetchFormData(int $id): ?FormEntity {
69 $formData = $this->wp->getTransient(self::PREVIEW_DATA_TRANSIENT_PREFIX . $id);
70 if (is_array($formData)) {
71 $name = is_string($formData['name'] ?? null) ? $formData['name'] : '';
72 $form = new FormEntity($name);
73 $form->setId(is_int($formData['id'] ?? null) ? $formData['id'] : 0);
74 $form->setBody(is_array($formData['body'] ?? null) ? $formData['body'] : null);
75 $form->setSettings(is_array($formData['settings'] ?? null) ? $formData['settings'] : null);
76 $form->setStyles(is_string($formData['styles'] ?? null) ? $formData['styles'] : null);
77 $form->setStatus(is_string($formData['status'] ?? null) ? $formData['status'] : FormEntity::STATUS_ENABLED);
78 return $form;
79 }
80 return $this->formRepository->findOneById($id);
81 }
82
83 private function getFormContent(FormEntity $form, int $formId, string $formDisplayType, string $editorUrl): string {
84 $settings = $form->getSettings();
85 $htmlId = 'mailpoet_form_preview_' . $formId;
86 $templateData = [
87 'is_preview' => true,
88 'editor_url' => $editorUrl,
89 'form_html_id' => $htmlId,
90 'form_id' => $formId,
91 'form_success_message' => $settings['success_message'] ?? null,
92 'form_type' => $formDisplayType,
93 'close_button_icon' => $settings['close_button'] ?? 'classic',
94 'styles' => $this->formRenderer->renderStyles($form, '#' . $htmlId, $formDisplayType),
95 'html' => $this->formRenderer->renderHTML($form),
96 'success' => false,
97 'error' => false,
98 'delay' => 1,
99 'position' => $settings['form_placement'][$formDisplayType]['position'] ?? '',
100 'animation' => $settings['form_placement'][$formDisplayType]['animation'] ?? '',
101 'triggerMode' => $settings['form_placement'][$formDisplayType]['trigger_mode'] ?? 'auto',
102 'clickTriggerSelector' => $settings['form_placement'][$formDisplayType]['click_trigger_selector'] ?? '',
103 'fontFamily' => $settings['font_family'] ?? '',
104 ];
105 $formPosition = $settings['form_placement'][$formDisplayType]['position'] ?? '';
106 if (!$formPosition && $formDisplayType === FormEntity::DISPLAY_TYPE_FIXED_BAR) {
107 $formPosition = 'top';
108 }
109 if (!$formPosition && $formDisplayType === FormEntity::DISPLAY_TYPE_SLIDE_IN) {
110 $formPosition = 'right';
111 }
112 $templateData['position'] = $formPosition;
113 return $this->templateRenderer->render('form/front_end_form.html', $templateData);
114 }
115
116 private function getPostContent(): string {
117 $posts = $this->wp->getPosts([
118 'numberposts' => 1,
119 'orderby' => 'date',
120 'order' => 'DESC',
121 'post_status' => 'publish',
122 'post_type' => 'post',
123 ]);
124 if (!isset($posts[0])) {
125 return '';
126 }
127 return $posts[0]->post_content;
128 }
129 }
130