PluginProbe
Fluent Forms – Customizable Contact Forms, Survey, Quiz, & Conversational Form Builder / 3.6.61
Fluent Forms – Customizable Contact Forms, Survey, Quiz, & Conversational Form Builder v3.6.61
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 3.6.61, at app/Services/FormBuilder/ShortCodeParser.php

382 lines 12.7 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, $provider = false)
31 {
32 try {
33 static::setDependencies($entryId, $data, $form);
34
35 if (is_array($parsable)) {
36 return static::parseShortCodeFromArray($parsable, $isUrl, $provider);
37 }
38
39 return static::parseShortCodeFromString($parsable, $isUrl, false);
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 $field = ArrayHelper::get(static::$formFields, $key, '');
149 if (empty($field['element'])) {
150 return '';
151 }
152
153 $value = ArrayHelper::get(static::$store['original_inputs'], $key);
154
155 return apply_filters(
156 'fluentform_response_render_' . $field['element'],
157 $value,
158 $field,
159 static::getForm()->id,
160 true
161 );
162 }
163
164 if (strpos($key, '.value')) {
165 $key = str_replace('.value', '', $key);
166 return ArrayHelper::get(static::$store['original_inputs'], $key);
167 }
168
169 if (strpos($key, '.') && !isset(static::$store['inputs'][$key])) {
170 return ArrayHelper::get(
171 static::$store['original_inputs'], $key, ''
172 );
173 }
174
175 if (!isset(static::$store['inputs'][$key])) {
176 static::$store['inputs'][$key] = ArrayHelper::get(
177 static::$store['inputs'], $key, ''
178 );
179 }
180
181 if (is_null(static::$formFields)) {
182 static::$formFields = FormFieldsParser::getShortCodeInputs(
183 static::getForm(), ['admin_label', 'attributes', 'options', 'raw']
184 );
185 }
186
187 $field = ArrayHelper::get(static::$formFields, $key, '');
188
189
190 if (!$field) return '';
191
192 if ($isHtml) {
193 return apply_filters(
194 'fluentform_response_render_' . $field['element'],
195 static::$store['original_inputs'][$key],
196 $field,
197 static::getForm()->id,
198 $isHtml
199 );
200 }
201
202 return static::$store['inputs'][$key] = apply_filters(
203 'fluentform_response_render_' . $field['element'],
204 static::$store['inputs'][$key],
205 $field,
206 static::getForm()->id,
207 $isHtml
208 );
209 }
210
211 protected static function getUserData($key)
212 {
213 if (is_null(static::$store['user'])) {
214 static::$store['user'] = wp_get_current_user();
215 }
216 return static::$store['user']->{$key};
217 }
218
219 protected static function getPostData($key)
220 {
221 if (is_null(static::$store['post'])) {
222 $postId = static::$store['inputs']['__fluent_form_embded_post_id'];
223 static::$store['post'] = get_post($postId);
224 static::$store['post']->permalink = get_the_permalink(static::$store['post']);
225 }
226
227 if (strpos($key, 'author.') !== false) {
228 $authorProperty = substr($key, strlen('author.'));
229 $authorId = static::$store['post']->post_author;
230 if ($authorId) {
231 $data = get_the_author_meta($authorProperty, $authorId);
232 if (!is_array($data)) {
233 return $data;
234 }
235 }
236 return '';
237 } else if (strpos($key, 'meta.') !== false) {
238 $metaKey = substr($key, strlen('meta.'));
239 $postId = static::$store['post']->ID;
240 $data = get_post_meta($postId, $metaKey, true);
241 if (!is_array($data)) {
242 return $data;
243 }
244 return '';
245 } else if (strpos($key, 'acf.') !== false) {
246 $metaKey = substr($key, strlen('acf.'));
247 $postId = static::$store['post']->ID;
248 if (function_exists('get_field')) {
249 $data = get_field($metaKey, $postId, true);
250 if (!is_array($data)) {
251 return $data;
252 }
253 return '';
254 }
255 }
256
257 return static::$store['post']->{$key};
258 }
259
260 protected static function getWPData($key)
261 {
262 if ($key == 'admin_email') {
263 return get_option('admin_email');
264 }
265 if ($key == 'site_url') {
266 return site_url();
267 }
268 if ($key == 'site_title') {
269 return get_option('blogname');
270 }
271 return $key;
272 }
273
274 protected static function getSubmissionData($key)
275 {
276 $entry = static::getEntry();
277 if (property_exists($entry, $key)) {
278 if ($key == 'total_paid' || $key == 'payment_total') {
279 return round($entry->{$key} / 100, 2);
280 }
281 if ($key == 'payment_method' && $key == 'test') {
282 return __('Offline', 'fluentform');
283 }
284 return $entry->{$key};
285 }
286 if ($key == 'admin_view_url') {
287 return admin_url('admin.php?page=fluent_forms&route=entries&form_id=' . $entry->form_id . '#/entries/' . $entry->id);
288 } else if (strpos($key, 'meta.') !== false) {
289 $metaKey = substr($key, strlen('meta.'));
290 $data = App\Helpers\Helper::getSubmissionMeta($entry->id, $metaKey);
291 if (!is_array($data)) {
292 return $data;
293 }
294 return '';
295 }
296
297 return '';
298 }
299
300 protected static function getOtherData($key)
301 {
302 if (strpos($key, 'date.') === 0) {
303 $format = str_replace('date.', '', $key);
304 return date($format, strtotime(current_time('mysql')));
305 } elseif ($key == 'admin_email') {
306 return get_option('admin_email', false);
307 } elseif ($key == 'ip') {
308 return static::getRequest()->getIp();
309 } elseif ($key == 'browser.platform') {
310 return static::getUserAgent()->getPlatform();
311 } elseif ($key == 'browser.name') {
312 return static::getUserAgent()->getBrowser();
313 } elseif ($key == 'all_data') {
314 $formFields = FormFieldsParser::getEntryInputs(static::getForm());
315 $inputLabels = FormFieldsParser::getAdminLabels(static::getForm(), $formFields);
316 $response = FormDataParser::parseFormSubmission(static::getEntry(), static::getForm(), $formFields, true);
317
318 $html = '<table class="ff_all_data" width="600" cellpadding="0" cellspacing="0"><tbody>';
319 foreach ($inputLabels as $key => $label) {
320 if (array_key_exists($key, $response->user_inputs) && ArrayHelper::get($response->user_inputs, $key)) {
321 $data = ArrayHelper::get($response->user_inputs, $key);
322 if (is_array($data) || is_object($data)) {
323 continue;
324 }
325 $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>';
326 }
327 }
328 $html .= '</tbody></table>';
329 return $html;
330 }
331 // This fallback actually
332 $handlerValue = apply_filters('fluentform_shortcode_parser_callback_' . $key, '{' . $key . '}', self::getInstance());
333
334 if ($handlerValue) {
335 return $handlerValue;
336 }
337 return '';
338 }
339
340 public static function getForm()
341 {
342 if (!is_object(static::$form)) {
343 static::$form = wpFluent()->table('fluentform_forms')->find(static::$form);
344 }
345
346 return static::$form;
347 }
348
349 public static function getEntry()
350 {
351 if (!is_object(static::$entry)) {
352 static::$entry = wpFluent()->table('fluentform_submissions')->find(static::$entry);
353 }
354
355 return static::$entry;
356 }
357
358 protected static function getRequest()
359 {
360 return App::make('request');
361 }
362
363 protected static function getUserAgent()
364 {
365 if (is_null(static::$browser)) {
366 static::$browser = new Browser();
367 }
368 return static::$browser;
369 }
370
371 public static function getInstance()
372 {
373 static $instance;
374 if ($instance) {
375 return $instance;
376 }
377 $instance = new static();
378 return $instance;
379 }
380 }
381
382