PluginProbe
Fluent Forms – Customizable Contact Forms, Survey, Quiz, & Conversational Form Builder / 4.3.6
Fluent Forms – Customizable Contact Forms, Survey, Quiz, & Conversational Form Builder v4.3.6
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 / Services / FormBuilder / ShortCodeParser.php

ShortCodeParser.php in Fluent Forms – Customizable Contact Forms, Survey, Quiz, & Conversational Form Builder 4.3.6, at app/Services/FormBuilder/ShortCodeParser.php

420 lines 14.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\Services\FormBuilder;
4
5 use FluentForm\App;
6 use FluentForm\App\Modules\Form\FormDataParser;
7 use FluentForm\App\Modules\Form\FormFieldsParser;
8 use FluentForm\App\Services\Browser\Browser;
9 use FluentForm\Framework\Helpers\ArrayHelper;
10
11 class ShortCodeParser
12 {
13 protected static $form = null;
14
15 protected static $entry = null;
16
17 protected static $browser = null;
18
19 protected static $formFields = null;
20
21 protected static $store = [
22 'inputs' => null,
23 'original_inputs' => null,
24 'user' => null,
25 'post' => null,
26 'other' => null,
27 'submission' => null
28 ];
29
30 public static function parse($parsable, $entryId, $data = [], $form = null, $isUrl = false, $providerOrIsHTML = false)
31 {
32 try {
33 static::setDependencies($entryId, $data, $form);
34
35 if (is_array($parsable)) {
36 return static::parseShortCodeFromArray($parsable, $isUrl, $providerOrIsHTML);
37 }
38
39 return static::parseShortCodeFromString($parsable, $isUrl, $providerOrIsHTML);
40
41 } catch (\Exception $e) {
42 if (defined('WP_DEBUG') && WP_DEBUG) {
43 error_log($e->getTraceAsString());
44 }
45 return '';
46 }
47 }
48
49 protected static function setDependencies($entry, $data, $form)
50 {
51 static::setEntry($entry);
52 static::setData($data);
53 static::setForm($form);
54 }
55
56 protected static function setEntry($entry)
57 {
58 static::$entry = $entry;
59 }
60
61 protected static function setdata($data)
62 {
63 if (!is_null($data)) {
64 static::$store['inputs'] = $data;
65 static::$store['original_inputs'] = $data;
66 } else {
67 $data = json_decode(static::getEntry()->response, true);
68 static::$store['inputs'] = $data;
69 static::$store['original_inputs'] = $data;
70 }
71 }
72
73 protected static function setForm($form)
74 {
75 if (!is_null($form)) {
76 static::$form = $form;
77 } else {
78 static::$form = static::getEntry()->form_id;
79 }
80 }
81
82 protected static function parseShortCodeFromArray($parsable, $isUrl = false, $provider = false)
83 {
84 foreach ($parsable as $key => $value) {
85 if (is_array($value)) {
86 $parsable[$key] = static::parseShortCodeFromArray($value, $isUrl, $provider);
87 } else {
88 $isHtml = false;
89 if ($provider) {
90 $isHtml = apply_filters('ff_will_return_html', false, $provider, $key);
91 }
92 $parsable[$key] = static::parseShortCodeFromString($value, $isUrl, $isHtml);
93 }
94 }
95
96 return $parsable;
97 }
98
99 protected static function parseShortCodeFromString($parsable, $isUrl = false, $isHtml = false)
100 {
101 if (!$parsable) {
102 return '';
103 }
104 return preg_replace_callback('/{+(.*?)}/', function ($matches) use ($isUrl, $isHtml) {
105 $value = '';
106 if (strpos($matches[1], 'inputs.') !== false) {
107 $formProperty = substr($matches[1], strlen('inputs.'));
108 $value = static::getFormData($formProperty, $isHtml);
109 } elseif (strpos($matches[1], 'user.') !== false) {
110 $userProperty = substr($matches[1], strlen('user.'));
111 $value = static::getUserData($userProperty);
112 } elseif (strpos($matches[1], 'embed_post.') !== false) {
113 $postProperty = substr($matches[1], strlen('embed_post.'));
114 $value = static::getPostData($postProperty);
115 } elseif (strpos($matches[1], 'wp.') !== false) {
116 $wpProperty = substr($matches[1], strlen('wp.'));
117 $value = static::getWPData($wpProperty);
118 } elseif (strpos($matches[1], 'submission.') !== false) {
119 $submissionProperty = substr($matches[1], strlen('submission.'));
120 $value = static::getSubmissionData($submissionProperty);
121 } elseif (strpos($matches[1], 'cookie.') !== false) {
122 $scookieProperty = substr($matches[1], strlen('cookie.'));
123 $value = ArrayHelper::get($_COOKIE, $scookieProperty);
124 } elseif (strpos($matches[1], 'payment.') !== false) {
125 $property = substr($matches[1], strlen('payment.'));
126 $value = apply_filters('fluentform_payment_smartcode', '', $property, self::getInstance());
127 } else {
128 $value = static::getOtherData($matches[1]);
129 }
130
131 if (is_array($value)) {
132 $value = fluentImplodeRecursive(', ', $value);
133 }
134
135 if ($isUrl) {
136 $value = urlencode($value);
137 }
138
139 return $value;
140
141 }, $parsable);
142 }
143
144 protected static function getFormData($key, $isHtml = false)
145 {
146 if (strpos($key, '.label')) {
147 $key = str_replace('.label', '', $key);
148 $isHtml = true;
149 }
150
151 if (strpos($key, '.value')) {
152 $key = str_replace('.value', '', $key);
153 return ArrayHelper::get(static::$store['original_inputs'], $key);
154 }
155
156 if (strpos($key, '.') && !isset(static::$store['inputs'][$key])) {
157 return ArrayHelper::get(
158 static::$store['original_inputs'], $key, ''
159 );
160 }
161
162 if (!isset(static::$store['inputs'][$key])) {
163 static::$store['inputs'][$key] = ArrayHelper::get(
164 static::$store['inputs'], $key, ''
165 );
166 }
167
168 if (is_null(static::$formFields)) {
169 static::$formFields = FormFieldsParser::getShortCodeInputs(
170 static::getForm(), ['admin_label', 'attributes', 'options', 'raw']
171 );
172 }
173
174 $field = ArrayHelper::get(static::$formFields, $key, '');
175
176
177 if (!$field) return '';
178
179 if ($isHtml) {
180 return apply_filters(
181 'fluentform_response_render_' . $field['element'],
182 static::$store['original_inputs'][$key],
183 $field,
184 static::getForm()->id,
185 $isHtml
186 );
187 }
188
189 return static::$store['inputs'][$key] = apply_filters(
190 'fluentform_response_render_' . $field['element'],
191 static::$store['inputs'][$key],
192 $field,
193 static::getForm()->id,
194 $isHtml
195 );
196 }
197
198 protected static function getUserData($key)
199 {
200 if (is_null(static::$store['user'])) {
201 static::$store['user'] = wp_get_current_user();
202 }
203 return static::$store['user']->{$key};
204 }
205
206 protected static function getPostData($key)
207 {
208 if (is_null(static::$store['post'])) {
209 $postId = static::$store['inputs']['__fluent_form_embded_post_id'];
210 static::$store['post'] = get_post($postId);
211 static::$store['post']->permalink = get_the_permalink(static::$store['post']);
212 }
213
214 if (strpos($key, 'author.') !== false) {
215 $authorProperty = substr($key, strlen('author.'));
216 $authorId = static::$store['post']->post_author;
217 if ($authorId) {
218 $data = get_the_author_meta($authorProperty, $authorId);
219 if (!is_array($data)) {
220 return $data;
221 }
222 }
223 return '';
224 } else if (strpos($key, 'meta.') !== false) {
225 $metaKey = substr($key, strlen('meta.'));
226 $postId = static::$store['post']->ID;
227 $data = get_post_meta($postId, $metaKey, true);
228 if (!is_array($data)) {
229 return $data;
230 }
231 return '';
232 } else if (strpos($key, 'acf.') !== false) {
233 $metaKey = substr($key, strlen('acf.'));
234 $postId = static::$store['post']->ID;
235 if (function_exists('get_field')) {
236 $data = get_field($metaKey, $postId, true);
237 if (!is_array($data)) {
238 return $data;
239 }
240 return '';
241 }
242 }
243
244 return static::$store['post']->{$key};
245 }
246
247 protected static function getWPData($key)
248 {
249 if ($key == 'admin_email') {
250 return get_option('admin_email');
251 }
252 if ($key == 'site_url') {
253 return site_url();
254 }
255 if ($key == 'site_title') {
256 return get_option('blogname');
257 }
258 return $key;
259 }
260
261 protected static function getSubmissionData($key)
262 {
263 $entry = static::getEntry();
264
265 if(empty($entry->id)) {
266 return '';
267 }
268
269 if (property_exists($entry, $key)) {
270 if ($key == 'total_paid' || $key == 'payment_total') {
271 return round($entry->{$key} / 100, 2);
272 }
273 if ($key == 'payment_method' && $key == 'test') {
274 return __('Offline', 'fluentform');
275 }
276 return $entry->{$key};
277 }
278 if ($key == 'admin_view_url') {
279 return admin_url('admin.php?page=fluent_forms&route=entries&form_id=' . $entry->form_id . '#/entries/' . $entry->id);
280 } else if (strpos($key, 'meta.') !== false) {
281 $metaKey = substr($key, strlen('meta.'));
282 $data = App\Helpers\Helper::getSubmissionMeta($entry->id, $metaKey);
283 if (!is_array($data)) {
284 return $data;
285 }
286 return '';
287 }
288
289 return '';
290 }
291
292 protected static function getOtherData($key)
293 {
294 if (strpos($key, 'date.') === 0) {
295 $format = str_replace('date.', '', $key);
296 return date($format, strtotime(current_time('mysql')));
297 } elseif ($key == 'admin_email') {
298 return get_option('admin_email', false);
299 } elseif ($key == 'ip') {
300 return static::getRequest()->getIp();
301 } elseif ($key == 'browser.platform') {
302 return static::getUserAgent()->getPlatform();
303 } elseif ($key == 'browser.name') {
304 return static::getUserAgent()->getBrowser();
305 } elseif (in_array($key, ['all_data', 'all_data_without_hidden_fields'])) {
306 $formFields = FormFieldsParser::getEntryInputs(static::getForm());
307 if (apply_filters('fluentform_all_data_skip_password_field', __return_true())) {
308 $passwords = FormFieldsParser::getInputsByElementTypes(static::getForm(), ['input_password']);
309 if (is_array($passwords) && !empty($passwords)) {
310 ArrayHelper::forget($formFields, array_keys($passwords));
311 }
312 }
313
314 $skipHiddenFields = ($key == 'all_data_without_hidden_fields') &&
315 apply_filters('fluentform_all_data_without_hidden_fields', __return_true());
316
317 if ($skipHiddenFields) {
318 $hiddenFields = FormFieldsParser::getInputsByElementTypes(static::getForm(), ['input_hidden']);
319 if (is_array($hiddenFields) && !empty($hiddenFields)) {
320 ArrayHelper::forget($formFields, array_keys($hiddenFields));
321 }
322 }
323
324 $inputLabels = FormFieldsParser::getAdminLabels(static::getForm(), $formFields);
325 $response = FormDataParser::parseFormSubmission(static::getEntry(), static::getForm(), $formFields, true);
326
327 $html = '<table class="ff_all_data" width="600" cellpadding="0" cellspacing="0"><tbody>';
328 foreach ($inputLabels as $key => $label) {
329 if (array_key_exists($key, $response->user_inputs) && ArrayHelper::get($response->user_inputs, $key) !== '') {
330 $data = ArrayHelper::get($response->user_inputs, $key);
331 if (is_array($data) || is_object($data)) {
332 continue;
333 }
334 $html .= '<tr class="field-label"><th style="padding: 6px 12px; background-color: #f8f8f8; text-align: left;"><strong>' . $label . '</strong></th></tr><tr class="field-value"><td style="padding: 6px 12px 12px 12px;">' . $data . '</td></tr>';
335 }
336 }
337 $html .= '</tbody></table>';
338 return apply_filters('fluentform_all_data_shortcode_html', $html, $formFields, $inputLabels, $response);
339 } elseif (strpos($key, 'pdf.download_link.') === 0) {
340 return apply_filters('fluentform_shortcode_parser_callback_pdf.download_link.public', $key, self::getInstance());
341 }
342
343 $groups = explode('.', $key);
344 if(count($groups) > 1) {
345 $group = array_shift($groups);
346 $property = implode('.', $groups);
347 $handlerValue = apply_filters('fluentform_smartcode_group_'.$group, $property, self::getInstance());
348 if($handlerValue != $property) {
349 return $handlerValue;
350 }
351 }
352
353 // This fallback actually
354 $handlerValue = apply_filters('fluentform_shortcode_parser_callback_' . $key, '{' . $key . '}', self::getInstance());
355
356 if ($handlerValue) {
357 return $handlerValue;
358 }
359 return '';
360 }
361
362 public static function getForm()
363 {
364 if (!is_object(static::$form)) {
365 static::$form = wpFluent()->table('fluentform_forms')->find(static::$form);
366 }
367
368 return static::$form;
369 }
370
371 public static function getEntry()
372 {
373 if (!is_object(static::$entry)) {
374 static::$entry = wpFluent()->table('fluentform_submissions')->find(static::$entry);
375 }
376
377 return static::$entry;
378 }
379
380 protected static function getRequest()
381 {
382 return App::make('request');
383 }
384
385 protected static function getUserAgent()
386 {
387 if (is_null(static::$browser)) {
388 static::$browser = new Browser();
389 }
390 return static::$browser;
391 }
392
393 public static function getInstance()
394 {
395 static $instance;
396 if ($instance) {
397 return $instance;
398 }
399 $instance = new static();
400 return $instance;
401 }
402
403 public static function getInputs()
404 {
405 return static::$store['original_inputs'];
406 }
407
408 public static function resetData()
409 {
410 self::$form = null;
411 self::$entry = null;
412 self::$browser = null;
413 self::$formFields = null;
414
415 FormFieldsParser::resetData();
416 FormDataParser::resetData();
417 }
418 }
419
420