Diff: STRATO-apps/wordpress_03/app/wp-content/plugins/fluentform/app/Modules/Form/FormDataParser.php

Keine Baseline-Datei – Diff nur gegen leer.
Zur Liste
1 -
1 + <?php
2 +
3 + namespace FluentForm\App\Modules\Form;
4 +
5 + use FluentForm\Framework\Helpers\ArrayHelper;
6 +
7 + class FormDataParser
8 + {
9 + protected static $data = null;
10 + protected static $submissionId = null;
11 +
12 + public static function parseFormEntries($entries, $form, $fields = null)
13 + {
14 + $fields = $fields ? $fields : FormFieldsParser::getEntryInputs($form);
15 +
16 + foreach ($entries as $entry) {
17 + static::parseFormEntry($entry, $form, $fields);
18 + }
19 +
20 + return $entries;
21 + }
22 +
23 + public static function parseFormEntry($entry, $form, $fields = null, $isHtml = false)
24 + {
25 + $fields = $fields ? $fields : FormFieldsParser::getEntryInputs($form);
26 +
27 + $entry->user_inputs = static::parseData(
28 + json_decode($entry->response),
29 + $fields,
30 + $form->id,
31 + $isHtml
32 + );
33 +
34 + return $entry;
35 + }
36 +
37 + public static function parseFormSubmission($submission, $form, $fields, $isHtml = false)
38 + {
39 + // Sometimes submission will change inside loop. So we need to parse submission data for new one
40 + $newSubmission = $submission->id != static::$submissionId;
41 +
42 + if (is_null(static::$data) || $newSubmission) {
43 + static::$data = static::parseData(
44 + json_decode($submission->response),
45 + $fields,
46 + $form->id,
47 + $isHtml
48 + );
49 + static::$submissionId = $submission->id;
50 + }
51 +
52 + $submission->user_inputs = static::$data;
53 +
54 + return $submission;
55 + }
56 +
57 + public static function parseData($response, $fields, $formId, $isHtml = false)
58 + {
59 + $trans = [];
60 + foreach ($fields as $field_key => $field) {
61 + if (isset($response->{$field_key})) {
62 + $value = $response->{$field_key};
63 +
64 + $value = apply_filters_deprecated(
65 + 'fluentform_response_render_' . $field['element'],
66 + [
67 + $value,
68 + $field,
69 + $formId,
70 + $isHtml
71 + ],
72 + FLUENTFORM_FRAMEWORK_UPGRADE,
73 + 'fluentform/response_render_' . $field['element'],
74 + 'Use fluentform/response_render_' . $field['element'] . ' instead of fluentform_response_render_' . $field['element']
75 + );
76 +
77 + $value = apply_filters(
78 + 'fluentform/response_render_' . $field['element'],
79 + $value,
80 + $field,
81 + $formId,
82 + $isHtml
83 + );
84 + $trans[$field_key] = $value;
85 + } else {
86 + $trans[$field_key] = '';
87 + }
88 + }
89 +
90 + return $trans;
91 + }
92 +
93 + public static function formatValue($value)
94 + {
95 + if (is_array($value) || is_object($value)) {
96 + return fluentImplodeRecursive(', ', array_filter(array_values((array) $value)));
97 + }
98 +
99 + return $value;
100 + }
101 +
102 + public static function formatFileValues($values, $isHtml, $form_id = null)
103 + {
104 + if (!$values) {
105 + return $values;
106 + }
107 +
108 + if (is_string($values)) {
109 + return $values;
110 + }
111 +
112 + if (!$isHtml) {
113 + return fluentImplodeRecursive(', ', array_filter(array_values((array) $values)));
114 + }
115 + if ($form_id && \FluentForm\App\Helpers\Helper::isEntryAutoDeleteEnabled($form_id)) {
116 + return '';
117 + }
118 +
119 + $html = '<ul class="ff_entry_list">';
120 + foreach ($values as $value) {
121 + if (!$value) {
122 + continue;
123 + }
124 + $html .= '<li><a href="' . $value . '" target="_blank">' . basename($value) . '</a></li>';
125 + }
126 +
127 + $html .= '</ul>';
128 + return $html;
129 + }
130 +
131 + public static function formatImageValues($values, $isHtml, $form_id = null)
132 + {
133 + if (!$values) {
134 + return $values;
135 + }
136 +
137 + if (is_string($values)) {
138 + return $values;
139 + }
140 +
141 + $isHtml = apply_filters('fluentform/render_field_as_html', $isHtml, $values, $form_id);
142 +
143 +
144 + if (!$isHtml) {
145 + return fluentImplodeRecursive(', ', array_filter(array_values((array) $values)));
146 + }
147 + if ($form_id && \FluentForm\App\Helpers\Helper::isEntryAutoDeleteEnabled($form_id)) {
148 + return '';
149 + }
150 + if (1 == count($values)) {
151 + $value = $values[0];
152 + if (!$value) {
153 + return '';
154 + }
155 + return '<a href="' . $value . '" target="_blank"><img style="max-width:180px" src="' . $value . '" /></a>';
156 + }
157 +
158 + $html = '<ul class="ff_entry_list ff_entry_images">';
159 + foreach ($values as $value) {
160 + if (!$value) {
161 + continue;
162 + }
163 + $html .= '<li style="margin: 20px 20px 20px 0px; display: inline-block; margin-right: 20px;"><a href="' . $value . '" target="_blank"><img style="max-width:180px" src="' . $value . '" /></a></li>';
164 + }
165 +
166 + $html .= '</ul>';
167 + return $html;
168 + }
169 +
170 + public static function formatRepeatFieldValue($value, $field, $form_id)
171 + {
172 +
173 + if (defined('FLUENTFORM_RENDERING_ENTRIES')) {
174 + return __('....', 'fluentform');
175 + }
176 +
177 + if (is_string($value)) {
178 + return $value;
179 + }
180 +
181 + try {
182 + $repeatColumns = ArrayHelper::get($field, 'raw.fields');
183 + $rows = count($value[0]);
184 + $columns = count($value);
185 +
186 + ob_start();
187 + if ($repeatColumns) {
188 + ?>
189 + <div class="ff_entry_table_wrapper">
190 + <table class="ff_entry_table_field ff-table">
191 + <thead>
192 + <tr>
193 + <?php foreach ($repeatColumns as $repeatColumn) : ?>
194 + <th><?php echo fluentform_sanitize_html(ArrayHelper::get($repeatColumn, 'settings.label')); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- fluentform_sanitize_html() removes XSS vectors and uses wp_kses() with allowed tags ?>
195 + </th>
196 + <?php endforeach; ?>
197 + </tr>
198 + </thead>
199 +
200 + <tbody>
201 + <?php for ($i = 0; $i < $rows; $i++) : ?>
202 + <tr>
203 + <?php for ($j = 0; $j < $columns; $j++) : ?>
204 + <td>
205 + <?php echo fluentform_sanitize_html($value[$j][$i]); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- fluentform_sanitize_html() removes XSS vectors and uses wp_kses() with allowed tags ?>
206 + </td>
207 + <?php endfor; ?>
208 + </tr>
209 + <?php endfor; ?>
210 + </tbody>
211 + </table>
212 + </div>
213 + <?php
214 + }
215 + return ob_get_clean();
216 + } catch (\Exception $e) {
217 + }
218 +
219 + return $value;
220 + }
221 +
222 + public static function formatTabularGridFieldValue($value, $field, $form_id, $isHtml = false)
223 + {
224 + if (defined('FLUENTFORM_RENDERING_ENTRIES')) {
225 + return __('....', 'fluentform');
226 + }
227 +
228 + if (is_string($value)) {
229 + return $value;
230 + }
231 +
232 + if (is_array($value)) {
233 + $value = (object) $value;
234 + }
235 + try {
236 + if (empty($field['raw'])) {
237 + return $value;
238 + }
239 + $columnLabels = $field['raw']['settings']['grid_columns'];
240 + $fieldType = $field['raw']['settings']['tabular_field_type'];
241 + $columnHeaders = implode('</th><th style="text-align: center;">', array_values($columnLabels));
242 +
243 + $elMarkup = "<table class='ff-table'><thead><tr><th></th><th style='text-align: center;'>{$columnHeaders}</th></tr></thead><tbody>";
244 +
245 + foreach (static::makeTabularData($field['raw']) as $row) {
246 + $elMarkup .= '<tr>';
247 + $elMarkup .= "<td>{$row['label']}</td>";
248 + foreach ($row['columns'] as $column) {
249 + $isChecked = '';
250 + if ('radio' == $fieldType) {
251 + if (isset($value->{$row['name']})) {
252 + $isChecked = $value->{$row['name']} == $column['name'] ? 'checked' : '';
253 + }
254 + } else {
255 + if (isset($value->{$row['name']})) {
256 + $isChecked = in_array($column['name'], $value->{$row['name']}) ? 'checked' : '';
257 + }
258 + }
259 + $icon = "<input disabled type='{$fieldType}' {$isChecked}>";
260 + if ($isChecked) {
261 + $icon = '✔';
262 + }
263 + $elMarkup .= "<td style='text-align: center;'>" . $icon . '</td>';
264 + }
265 + $elMarkup .= '</tr>';
266 + }
267 +
268 + $elMarkup .= '</tbody></table>';
269 +
270 + return $elMarkup;
271 + } catch (\Exception $e) {
272 + }
273 + return '';
274 + }
275 +
276 + public static function makeTabularData($data)
277 + {
278 + $table = [];
279 + $rows = $data['settings']['grid_rows'];
280 + $columns = $data['settings']['grid_columns'];
281 +
282 + foreach ($rows as $rowKey => $rowValue) {
283 + $rowKey = trim(sanitize_text_field($rowKey));
284 + $table[$rowKey] = [
285 + 'name' => $rowKey,
286 + 'label' => $rowValue,
287 + 'columns' => [],
288 + ];
289 +
290 + foreach ($columns as $columnKey => $columnValue) {
291 + $table[$rowKey]['columns'][] = [
292 + 'name' => trim(sanitize_text_field($columnKey)),
293 + 'label' => $columnValue,
294 + ];
295 + }
296 + }
297 + return $table;
298 + }
299 +
300 + /**
301 + * Format input_name field value by concatenating all name fields.
302 + *
303 + * @param array|object $value
304 + *
305 + * @return string $value
306 + */
307 + public static function formatName($value)
308 + {
309 + if (is_array($value) || is_object($value)) {
310 + $value = (array) $value;
311 + $order = ['first_name', 'middle_name', 'last_name'];
312 + uksort($value, function($a, $b) use ($order) {
313 + $posA = array_search($a, $order);
314 + $posB = array_search($b, $order);
315 + return $posA - $posB;
316 + });
317 + return fluentImplodeRecursive(' ', array_filter(array_values($value)));
318 + }
319 +
320 + return $value;
321 + }
322 +
323 + public static function formatCheckBoxValues($values, $field, $isHtml = false)
324 + {
325 + if (!$isHtml) {
326 + if (
327 + defined('FLUENTFORM_RENDERING_ENTRIES') &&
328 + $values && is_array($values) &&
329 + $options = ArrayHelper::get($field, 'raw.settings.advanced_options', [])
330 + ) {
331 + $options = array_column($options, 'label', 'value');
332 + foreach ($values as &$value) {
333 + if ($label = ArrayHelper::get($options, $value)) {
334 + $value = $label;
335 + }
336 + }
337 + }
338 + return self::formatValue($values);
339 + }
340 +
341 + if (!is_array($values)) {
342 + return $values;
343 + }
344 +
345 + if (empty($values)) {
346 + return '';
347 + }
348 +
349 + if (!isset($field['options'])) {
350 + $field['options'] = [];
351 + foreach (ArrayHelper::get($field, 'raw.settings.advanced_options', []) as $option) {
352 + $field['options'][$option['value']] = $option['label'];
353 + }
354 + }
355 +
356 + $html = '<ul style="white-space: normal;">';
357 + foreach ($values as $value) {
358 + $item = $value;
359 + if ($itemLabel = ArrayHelper::get($field, 'options.' . $item)) {
360 + $item = $itemLabel;
361 + }
362 + $html .= '<li>' . $item . '</li>';
363 + }
364 +
365 + return $html . '</ul>';
366 + }
367 +
368 + public static function resetData()
369 + {
370 + static::$data = null;
371 + }
372 + }
373 +