PluginProbe
Bit Form – Contact Form, Payment Forms, Multi Step Forms, Calculator & Custom Form Builder / 3.2.0
Bit Form – Contact Form, Payment Forms, Multi Step Forms, Calculator & Custom Form Builder v3.2.0
V-3.3.0 3.2.2 3.2.1 3.2.0 3.1.4 3.1.3 3.1.2 3.1.1 3.1.0 V3.0.3 V3.0.2 -3.0.1 V_3.0.0 1.1.1 1.1.8 1.2 1.3 1.4 1.4.18 1.5.2 1.9 2.0 2.10.0 2.10.1 2.10.2 All 137 releases
bit-form / includes / Core / Util / FormDuplicateHelper.php

FormDuplicateHelper.php in Bit Form – Contact Form, Payment Forms, Multi Step Forms, Calculator & Custom Form Builder 3.2.0, at includes/Core/Util/FormDuplicateHelper.php

183 lines 8.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace BitCode\BitForm\Core\Util;
4
5 /**
6 * Helps to relpicate form information for form duplication or export
7 *
8 */
9 final class FormDuplicateHelper
10 {
11 /**
12 * Create replica
13 *
14 * @param Array $data Data to replicate
15 * @param Integer $oldFormId Id of the form which will be replicated
16 * @param Integer|String $newFormId Id of the new form
17 *
18 * @return $formData Replicated data
19 */
20 public static function createReplica($data, $oldFormId, $newFormId)
21 {
22 // $new_lay_fields = static::genarateNewLayoutNField($data['form_content']['layout'], $data['form_content']['fields'], $oldFormId, $newFormId);
23 $formName = $data['form_name'];
24 $formData = (object)[];
25 $formData->form_id = $newFormId;
26 $formData->fields = (object) $data['form_content']['fields'];
27 $formData->layout = $data['form_content']['layout'];
28 $formData->nestedLayouts = $data['form_content']['nestedLayout'];
29 $formData->form_name = $formName;
30 $formData->formInfo = isset($data['form_content']['formInfo']) ? $data['form_content']['formInfo'] : (object)[];
31
32 if (isset($data['formSettings'])) {
33 $formSettings = (array) (!is_string($data['formSettings']) ? $data['formSettings'] : json_decode($data['formSettings']));
34
35 if (isset($formSettings['confirmation'])) {
36 $confirmation = !is_string($formSettings['confirmation']) ? wp_json_encode($formSettings['confirmation']) : $formSettings['confirmation'];
37 $formSettings['confirmation'] = json_decode(\preg_replace('/(\${bf?)(\d+)([- \d]+\})/', '${1}' . $newFormId . '$3', $confirmation));
38 }
39
40 if (isset($formSettings['integrations'])) {
41 $integrations = !is_string($formSettings['integrations']) ? wp_json_encode($formSettings['integrations']) : $formSettings['integrations'];
42 $integrations = \preg_replace('/(\${bf?)(\d+)([- \d]+\})/', '${1}' . $newFormId . '$3', $integrations);
43 $formSettings['integrations'] = json_decode(\preg_replace('/(\"formField\"\s*\:\s*\"bf?)(\d+)([- \d]+)/', '${1}' . $newFormId . '$3', $integrations));
44 }
45
46 if (isset($formSettings['formAbandonment'])) {
47 $formAbandonment = !is_string($formSettings['formAbandonment']) ? wp_json_encode($formSettings['formAbandonment']) : $formSettings['formAbandonment'];
48 $formSettings['formAbandonment'] = json_decode(\preg_replace('/(\${bf?)(\d+)([- \d]+\})/', '${1}' . $newFormId . '$3', $formAbandonment));
49 }
50
51 if (isset($formSettings['mailTem'])) {
52 $mailTem = !is_string($formSettings['mailTem']) ? wp_json_encode($formSettings['mailTem']) : $formSettings['mailTem'];
53 $formSettings['mailTem'] = json_decode(\preg_replace('/(\${bf?)(\d+)([- \d]+\})/', '${1}' . $newFormId . '$3', $mailTem));
54 $formData->formSettings = (object)$formSettings;
55 }
56
57 if (isset($formSettings['pdfTem'])) {
58 $pdfTem = !is_string($formSettings['pdfTem']) ? wp_json_encode($formSettings['pdfTem']) : $formSettings['pdfTem'];
59 $formSettings['pdfTem'] = json_decode(\preg_replace('/(\${bf?)(\d+)([- \d]+\})/', '${1}' . $newFormId . '$3', $pdfTem));
60 $formData->formSettings = (object)$formSettings;
61 }
62 }
63
64 if (isset($data['breakpointSize'])) {
65 $formData->breakpointSize = $data['breakpointSize'];
66 }
67 if (isset($data['style'])) {
68 // $styleTemp = !is_string($data['style']) ? wp_json_encode($data['style']) : $data['style'];
69 // $formData->style = json_decode(\preg_replace('/(\.?b)(\d+)(-\d+)/', '${1}' . $newFormId . '$3', $styleTemp));
70 $formData->style = $data['style'];
71 }
72 if (isset($data['themeVars'])) {
73 $formData->themeVars = $data['themeVars'];
74 }
75 if (isset($data['staticStyles'])) {
76 $formData->staticStyles = $data['staticStyles'];
77 }
78 if (isset($data['themeColors'])) {
79 $formData->themeColors = $data['themeColors'];
80 }
81 if (isset($data['builderSettings'])) {
82 $formData->builderSettings = $data['builderSettings'];
83 }
84
85 if (isset($data['workFlows'])) {
86 $workFlows = !is_string($data['workFlows']) ? wp_json_encode($data['workFlows']) : $data['workFlows'];
87 $workFlows = \preg_replace('/(\${bf?)(\d+)([- \d]+\})/', '${1}' . $newFormId . '$3', $workFlows);
88 $workFlows = json_decode(\preg_replace('/(\"bf?)(\d+)([- \d]+\")/', '${1}' . $newFormId . '$3', $workFlows));
89 $formData->workFlows = $workFlows;
90 }
91
92 if (isset($data['reports'])) {
93 $reports = !is_string($data['reports']) ? wp_json_encode($data['reports']) : $data['reports'];
94 $reports = json_decode(\preg_replace("/(\"bf?)(\d+)([- \d]+\")/", '${1}' . $newFormId . '$3', $reports));
95 $formData->reports = $reports;
96 }
97
98 if (isset($data['additional'])) {
99 $formData->additional = $data['additional'];
100 }
101
102 $formData->customCode = (object) [];
103 if (isset($data['customCode']->customCss)) {
104 $customCss = !is_string($data['customCode']->customCss) ? wp_json_encode($data['customCode']->customCss) : $data['customCode']->customCss;
105 $customCss = \preg_replace('/(\${bf?)(\d+)([- \d]+\})/', '${1}' . $newFormId . '$3', $customCss);
106 $formData->customCode->customCss = \preg_replace('/(\"bf?)(\d+)([- \d]+\")/', '${1}' . $newFormId . '$3', $customCss);
107 }
108
109 if (isset($data['customCode']->customJs)) {
110 $customJs = !is_string($data['customCode']->customJs) ? wp_json_encode($data['customCode']->customJs) : $data['customCode']->customJs;
111 $customJs = \preg_replace('/(\${bf?)(\d+)([- \d]+\})/', '${1}' . $newFormId . '$3', $customJs);
112 $formData->customCode->customJs = \preg_replace('/(\"bf?)(\d+)([- \d]+\")/', '${1}' . $newFormId . '$3', $customJs);
113 }
114 return $formData;
115 }
116
117 public static function genarateNewLayoutNField($layout, $fields, $oldId, $newId)
118 {
119 $newField = (object) [];
120 foreach ((array)$layout->lg as $ind => $itm) {
121 $fld_tmp = $fields->{$layout->lg[$ind]->i};
122 $layout->lg[$ind]->i = \preg_replace('/bf?(\d+)(-\d+)/', "b$newId$2", $layout->lg[$ind]->i);
123 $layout->md[$ind]->i = \preg_replace('/bf?(\d+)(-\d+)/', "b$newId$2", $layout->md[$ind]->i);
124 $layout->sm[$ind]->i = \preg_replace('/bf?(\d+)(-\d+)/', "b$newId$2", $layout->sm[$ind]->i);
125 $newField->{$layout->lg[$ind]->i} = json_decode(\preg_replace('/bf?(\d+)(-\d+)/', "b$newId$2", wp_json_encode($fld_tmp)));
126 }
127 return ['layout' => $layout, 'fields' => $newField];
128 }
129
130 public static function calcRowHeight($formStyle, $formID)
131 {
132 $rowHeight = 0;
133 preg_match('/fld-lbl-' . $formID . '\s*{[\w\-\(\)\!\;\,\s\:\.\#]*font-size\s*:\s*(\d+)[px|em|rem|!important]*;/', $formStyle, $fontSize);
134 if ($fontSize) {
135 $lineHeight = 1;
136 preg_match('/fld-lbl-' . $formID . '\s*{[\w\-\(\)\!\;\,\s\:\#]*line-height\s*:\s*([.\d]+)[!important]*;/', $formStyle, $lineHeightMatched);
137 if ($lineHeightMatched) {
138 $lineHeight = $lineHeightMatched[1];
139 }
140 $rowHeight = $fontSize[1] * $lineHeight;
141 }
142
143 preg_match('/fld-wrp-' . $formID . '\s*{[\w\-\(\)\!\;\,\s\:\#]*padding\s*:\s*([\d\spx|em|rem|]+)[!important]*;/', $formStyle, $padding);
144 if ($padding) {
145 $rowHeight = $rowHeight + static::cssPropSumByAxis(explode(' ', preg_replace('/px|em|rem|!important/', '', $padding[1])), 'Y');
146 }
147
148 preg_match('/input.fld-' . $formID . '\s*,\s*textarea.fld-' . $formID . '\s*{[\w\-\(\)\!\;\,\s\:\#]*margin\s*:\s*([\d\spx|em|rem|]+)[!important]*;/', $formStyle, $margin);
149 if ($margin) {
150 $rowHeight = $rowHeight + static::cssPropSumByAxis(explode(' ', preg_replace('/px|em|rem|!important/', '', $margin[1])), 'Y');
151 }
152 preg_match('/input.fld-' . $formID . '\s*,\s*textarea.fld-' . $formID . '\s*{[\w\-\(\)\!\;\,\s\:\#]*[^line\-height]height\s*:\s*([\d\s]+)[px|em|rem|!important]*;/', $formStyle, $height);
153 if ($height) {
154 $rowHeight = $rowHeight + $height[1];
155 } else {
156 $rowHeight = $rowHeight + 40;
157 }
158
159 return $rowHeight / 2;
160 }
161
162 public static function cssPropSumByAxis($value, $axis)
163 {
164 if (1 === count($value)) {
165 $value = array_fill(0, 4, $value[0]);
166 }
167
168 if (2 === count($value)) {
169 $value[] = $value[0];
170 $value[] = $value[1];
171 }
172
173 if (3 === count($value)) {
174 $value[] = $value[1];
175 }
176 if ('X' === $axis) {
177 return intval($value[1]) + intval($value[3]);
178 } else {
179 return intval($value[0]) + intval($value[2]);
180 }
181 }
182 }
183