PluginProbe
The Innovative Form Builder – IvyForms / 1.4
The Innovative Form Builder – IvyForms v1.4
1.5.1 1.5 1.4.1 1.4 trunk 0.1.2 0.2 0.2.1 0.3 0.3.1 0.4 0.5 0.6 0.6.1 0.6.1-backup 0.6.1.1 0.7 0.8 0.8.1 0.8.2 0.9 0.9.1 1.0 1.1 1.1.1 All 27 releases
ivyforms / backend / src / Common / Helpers / FormPreviewHelper.php

FormPreviewHelper.php in The Innovative Form Builder – IvyForms 1.4, at backend/src/Common/Helpers/FormPreviewHelper.php

106 lines 2.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * FormPreviewHelper - Shared helper for generating form preview data
5 *
6 * Used by both Gutenberg and Elementor integrations for editor preview rendering.
7 *
8 * @copyright © Melograno Venture Studio. All rights reserved.
9 * @licence See LICENCE.md for license details.
10 */
11
12 namespace IvyForms\Common\Helpers;
13
14 // phpcs:disable PSR1.Files.SideEffects
15 if (!defined('ABSPATH')) {
16 exit; // Exit if accessed directly
17 }
18
19 use IvyForms\Services\Shortcode\ShortcodeService;
20
21 /**
22 * Class FormPreviewHelper
23 *
24 * Generates form data JSON and embedded script tags for editor previews
25 *
26 * @package IvyForms\Common\Helpers
27 */
28 class FormPreviewHelper
29 {
30 /**
31 * Generate embedded form data JSON for data attribute
32 *
33 * @param int $formId
34 * @return string
35 */
36 public static function generateFormDataJson(int $formId): string
37 {
38 if (empty(ShortcodeService::$formList)) {
39 return '';
40 }
41
42 $formDataMap = self::filterFormListById($formId);
43 if (empty($formDataMap)) {
44 return '';
45 }
46
47 $json = wp_json_encode($formDataMap);
48 return $json !== false ? $json : '';
49 }
50
51 /**
52 * Generate embedded JSON script blocks
53 *
54 * @param int $formId
55 * @return string
56 */
57 public static function generateJsonScripts(int $formId): string
58 {
59 if (empty(ShortcodeService::$formList)) {
60 return '';
61 }
62
63 $scripts = '';
64 foreach (ShortcodeService::$formList as $counterKey => $payload) {
65 if (isset($payload['id']) && (int)$payload['id'] === (int)$formId) {
66 $scripts .= self::buildScriptTag($counterKey, $payload);
67 }
68 }
69
70 return $scripts;
71 }
72
73 /**
74 * Build a single JSON script tag
75 *
76 * @param string $counterKey
77 * @param array<string, mixed> $payload
78 * @return string
79 */
80 private static function buildScriptTag(string $counterKey, array $payload): string
81 {
82 $json = wp_json_encode($payload);
83 $json = str_replace('</script>', '<\/script>', $json);
84 return '<script type="application/json" class="ivyforms-ssr-data"'
85 . ' data-ivyforms-counter="' . esc_attr($counterKey) . '">'
86 . $json . '</script>';
87 }
88
89 /**
90 * Filter form list by form ID
91 *
92 * @param int $formId
93 * @return array<string, mixed>
94 */
95 private static function filterFormListById(int $formId): array
96 {
97 $formDataMap = [];
98 foreach (ShortcodeService::$formList as $counterKey => $payload) {
99 if (isset($payload['id']) && (int)$payload['id'] === (int)$formId) {
100 $formDataMap[$counterKey] = $payload;
101 }
102 }
103 return $formDataMap;
104 }
105 }
106