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

369 lines 12.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, $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 $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 if (property_exists($entry, $key)) {
265 if ($key == 'total_paid' || $key == 'payment_total') {
266 return round($entry->{$key} / 100, 2);
267 }
268 if ($key == 'payment_method' && $key == 'test') {
269 return __('Offline', 'fluentform');
270 }
271 return $entry->{$key};
272 }
273 if ($key == 'admin_view_url') {
274 return admin_url('admin.php?page=fluent_forms&route=entries&form_id=' . $entry->form_id . '#/entries/' . $entry->id);
275 } else if (strpos($key, 'meta.') !== false) {
276 $metaKey = substr($key, strlen('meta.'));
277 $data = App\Helpers\Helper::getSubmissionMeta($entry->id, $metaKey);
278 if (!is_array($data)) {
279 return $data;
280 }
281 return '';
282 }
283
284 return '';
285 }
286
287 protected static function getOtherData($key)
288 {
289 if (strpos($key, 'date.') === 0) {
290 $format = str_replace('date.', '', $key);
291 return date($format, strtotime(current_time('mysql')));
292 } elseif ($key == 'admin_email') {
293 return get_option('admin_email', false);
294 } elseif ($key == 'ip') {
295 return static::getRequest()->getIp();
296 } elseif ($key == 'browser.platform') {
297 return static::getUserAgent()->getPlatform();
298 } elseif ($key == 'browser.name') {
299 return static::getUserAgent()->getBrowser();
300 } elseif ($key == 'all_data') {
301 $formFields = FormFieldsParser::getEntryInputs(static::getForm());
302 $inputLabels = FormFieldsParser::getAdminLabels(static::getForm(), $formFields);
303 $response = FormDataParser::parseFormSubmission(static::getEntry(), static::getForm(), $formFields, true);
304
305 $html = '<table class="ff_all_data" width="600" cellpadding="0" cellspacing="0"><tbody>';
306 foreach ($inputLabels as $key => $label) {
307 if (array_key_exists($key, $response->user_inputs) && ArrayHelper::get($response->user_inputs, $key)) {
308 $data = ArrayHelper::get($response->user_inputs, $key);
309 if (is_array($data) || is_object($data)) {
310 continue;
311 }
312 $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>';
313 }
314 }
315 $html .= '</tbody></table>';
316 return $html;
317 }
318 // This fallback actually
319 $handlerValue = apply_filters('fluentform_shortcode_parser_callback_' . $key, '{' . $key . '}', self::getInstance());
320
321 if ($handlerValue) {
322 return $handlerValue;
323 }
324 return '';
325 }
326
327 public static function getForm()
328 {
329 if (!is_object(static::$form)) {
330 static::$form = wpFluent()->table('fluentform_forms')->find(static::$form);
331 }
332
333 return static::$form;
334 }
335
336 public static function getEntry()
337 {
338 if (!is_object(static::$entry)) {
339 static::$entry = wpFluent()->table('fluentform_submissions')->find(static::$entry);
340 }
341
342 return static::$entry;
343 }
344
345 protected static function getRequest()
346 {
347 return App::make('request');
348 }
349
350 protected static function getUserAgent()
351 {
352 if (is_null(static::$browser)) {
353 static::$browser = new Browser();
354 }
355 return static::$browser;
356 }
357
358 public static function getInstance()
359 {
360 static $instance;
361 if ($instance) {
362 return $instance;
363 }
364 $instance = new static();
365 return $instance;
366 }
367 }
368
369