PluginProbe
Fluent Forms – Customizable Contact Forms, Survey, Quiz, & Conversational Form Builder / 3.6.65
Fluent Forms – Customizable Contact Forms, Survey, Quiz, & Conversational Form Builder v3.6.65
6.2.14 6.2.13 6.2.12 6.2.10 6.2.11 6.2.9 6.2.8 6.2.7 6.2.6 6.2.5 6.2.4 6.2.3 6.2.2 3.6.22 3.6.31 3.6.40 3.6.41 3.6.42 3.6.50 3.6.51 3.6.60 3.6.61 3.6.62 3.6.64 3.6.65 All 196 releases
fluentform / app / Modules / Form / FormDataParser.php

FormDataParser.php in Fluent Forms – Customizable Contact Forms, Survey, Quiz, & Conversational Form Builder 3.6.65, at app/Modules/Form/FormDataParser.php

315 lines 9.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace FluentForm\App\Modules\Form;
4
5 use FluentForm\Framework\Helpers\ArrayHelper;
6 use WpFluent\Exception;
7
8 class FormDataParser
9 {
10 protected static $data = 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), $fields, $form->id, $isHtml
29 );
30
31 return $entry;
32 }
33
34 public static function parseFormSubmission($submission, $form, $fields, $isHtml = false)
35 {
36 if (is_null(static::$data)) {
37 static::$data = static::parseData(
38 json_decode($submission->response), $fields, $form->id, $isHtml
39 );
40 }
41
42 $submission->user_inputs = static::$data;
43
44 return $submission;
45 }
46
47 public static function parseData($response, $fields, $formId, $isHtml = false)
48 {
49 $trans = [];
50 foreach ($fields as $field_key => $field) {
51 if (isset($response->{$field_key})) {
52 $value = apply_filters(
53 'fluentform_response_render_' . $field['element'],
54 $response->{$field_key},
55 $field,
56 $formId,
57 $isHtml
58 );
59 $trans[$field_key] = $value;
60 } else {
61 $trans[$field_key] = '';
62 }
63 }
64
65 return $trans;
66 }
67
68 public static function formatValue($value)
69 {
70 if (is_array($value) || is_object($value)) {
71 return fluentImplodeRecursive(', ', array_filter(array_values((array)$value)));
72 }
73
74 return $value;
75 }
76
77 public static function formatFileValues($values, $isHtml)
78 {
79 if (!$values) {
80 return $values;
81 }
82
83 if (is_string($values)) {
84 return $values;
85 }
86
87 if (!$isHtml) {
88 return fluentImplodeRecursive(', ', array_filter(array_values((array)$values)));
89 }
90
91 $html = '<ul class="ff_entry_list">';
92 foreach ($values as $value) {
93 if (!$value) {
94 continue;
95 }
96 $html .= '<li><a href="' . $value . '" target="_blank">' . basename($value) . '</a></li>';
97 }
98
99 $html .= '</ul>';
100 return $html;
101 }
102
103 public static function formatImageValues($values, $isHtml)
104 {
105 if (!$values) {
106 return $values;
107 }
108
109 if (is_string($values)) {
110 return $values;
111 }
112
113 if (!$isHtml) {
114 return fluentImplodeRecursive(', ', array_filter(array_values((array)$values)));
115 }
116
117 if (count($values) == 1) {
118 $value = $values[0];
119 if (!$value) {
120 return '';
121 }
122 return '<a href="' . $value . '" target="_blank"><img style="max-width:180px" src="' . $value . '" /></a>';
123 }
124
125 $html = '<ul class="ff_entry_list ff_entry_images">';
126 foreach ($values as $value) {
127 if (!$value) {
128 continue;
129 }
130 $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>';
131 }
132
133 $html .= '</ul>';
134 return $html;
135 }
136
137 public static function formatRepeatFieldValue($value, $field, $form_id)
138 {
139
140 if (defined('FLUENTFORM_RENDERING_ENTRIES')) {
141 return __('....', 'fluentform');
142 }
143
144 if (is_string($value)) {
145 return $value;
146 }
147
148 try {
149 $repeatColumns = ArrayHelper::get($field, 'raw.fields');
150 $rows = count($value[0]);
151 $columns = count($value);
152
153 ob_start();
154 if ($repeatColumns) {
155 ?>
156 <div class="ff_entry_table_wrapper">
157 <table class="ff_entry_table_field ff-table">
158 <thead>
159 <tr>
160 <?php foreach ($repeatColumns as $repeatColumn) : ?>
161 <th><?php echo ArrayHelper::get($repeatColumn, 'settings.label'); ?></th>
162 <?php endforeach; ?>
163 </tr>
164 </thead>
165
166 <tbody>
167 <?php for ($i = 0; $i < $rows; $i++) : ?>
168 <tr>
169 <?php for ($j = 0; $j < $columns; $j++) : ?>
170 <td>
171 <?php echo $value[$j][$i] ?>
172 </td>
173 <?php endfor; ?>
174 </tr>
175 <?php endfor; ?>
176 </tbody>
177 </table>
178 </div>
179 <?php
180 }
181 return ob_get_clean();
182 } catch (Exception $e) {
183
184 }
185
186 return $value;
187 }
188
189 public static function formatTabularGridFieldValue($value, $field, $form_id, $isHtml = false)
190 {
191 if (defined('FLUENTFORM_RENDERING_ENTRIES')) {
192 return __('....', 'fluentform');
193 }
194
195 if (is_string($value)) {
196 return $value;
197 }
198
199 if (is_array($value)) {
200 $value = (object)$value;
201 }
202 try {
203 if (empty($field['raw'])) {
204 return $value;
205 }
206 $columnLabels = $field['raw']['settings']['grid_columns'];
207 $fieldType = $field['raw']['settings']['tabular_field_type'];
208 $columnHeaders = implode('</th><th style="text-align: center;">', array_values($columnLabels));
209
210 $elMarkup = "<table class='ff-table'><thead><tr><th></th><th style='text-align: center;'>{$columnHeaders}</th></tr></thead><tbody>";
211
212 foreach (static::makeTabularData($field['raw']) as $row) {
213
214 $elMarkup .= "<tr>";
215 $elMarkup .= "<td>{$row['label']}</td>";
216 foreach ($row['columns'] as $column) {
217 $isChecked = '';
218 if ($fieldType == 'radio') {
219 if (isset($value->{$row['name']})) {
220 $isChecked = $value->{$row['name']} == $column['name'] ? 'checked' : '';
221 }
222 } else {
223 if (isset($value->{$row['name']})) {
224 $isChecked = in_array($column['name'], $value->{$row['name']}) ? 'checked' : '';
225 }
226 }
227 $icon = "<input disabled type='{$fieldType}' {$isChecked}>";
228 if ($isChecked) {
229 $icon = '';
230 }
231 $elMarkup .= "<td style='text-align: center;'>" . $icon . "</td>";
232 }
233 $elMarkup .= "</tr>";
234 }
235
236 $elMarkup .= "</tbody></table>";
237
238 return $elMarkup;
239 } catch (Exception $e) {
240
241 }
242 return '';
243 }
244
245 public static function makeTabularData($data)
246 {
247 $table = [];
248 $rows = $data['settings']['grid_rows'];
249 $columns = $data['settings']['grid_columns'];
250
251 foreach ($rows as $rowKey => $rowValue) {
252 $table[$rowKey] = [
253 'name' => $rowKey,
254 'label' => $rowValue,
255 'columns' => []
256 ];
257
258 foreach ($columns as $columnKey => $columnValue) {
259 $table[$rowKey]['columns'][] = [
260 'name' => $columnKey,
261 'label' => $columnValue
262 ];
263 }
264 }
265
266 return $table;
267 }
268
269 /**
270 * Format input_name field value by concatenating all name fields.
271 *
272 * @param array|object $value
273 *
274 * @return string $value
275 */
276 public static function formatName($value)
277 {
278 if (is_array($value) || is_object($value)) {
279 return fluentImplodeRecursive(' ', array_filter(array_values((array)$value)));
280 }
281
282 return $value;
283 }
284
285 public static function formatCheckBoxValues($values, $field, $isHtml = false)
286 {
287 if(!$isHtml) {
288 return self::formatValue($values);
289 }
290
291 if(!is_array($values) || empty($values)) {
292 return $values;
293 }
294
295 if(!isset($field['options'])) {
296 $field['options'] = [];
297 foreach (ArrayHelper::get($field, 'raw.settings.advanced_options', []) as $option) {
298 $field['options'][$option['value']] = $option['label'];
299 }
300 }
301
302 $html = '<ul style="white-space: normal;">';
303 foreach ($values as $value) {
304 $item = $value;
305 if($itemLabel = ArrayHelper::get($field, 'options.'.$item)) {
306 $item = $itemLabel;
307 }
308 $html .= '<li>'.$item.'</li>';
309 }
310
311 return $html.'</ul>';
312
313 }
314 }
315