PluginProbe
Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More / 6.7
Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More v6.7
6.35 6.34 6.33.1 6.33 6.32.1 6.32 6.31 6.25 6.25.1 6.26 6.26.1 6.27 6.28 6.29 6.3 6.3.1 6.3.2 6.30 6.4 6.4.1 6.4.2 6.5 6.5.1 6.5.2 6.5.3 All 141 releases
← All changes | classes/models/FrmFieldFormHtml.php +21 -116 6.266.7 View file →
@@ -5,18 +5,13 @@
5 5
6 6 /**
7 7 * @since 3.0
8 8 */
9 +
9 10 class FrmFieldFormHtml {
10 11
11 - /**
12 - * @var string
13 - */
14 12 private $html;
15 13
16 - /**
17 - * @var string
18 - */
19 14 private $html_id;
20 15
21 16 /**
22 17 * @var FrmFieldType
@@ -22,21 +17,12 @@
22 17 * @var FrmFieldType
23 18 */
24 19 private $field_obj;
25 20
26 - /**
27 - * @var int|string
28 - */
29 21 private $field_id;
30 22
31 - /**
32 - * @var array|object
33 - */
34 23 private $form = array();
35 24
36 - /**
37 - * @var array
38 - */
39 25 private $pass_args = array();
40 26
41 27 /**
42 28 * @since 3.0
@@ -55,11 +41,9 @@
55 41 /**
56 42 * @since 3.0
57 43 *
58 44 * @param string $param
59 - * @param array $atts
60 - *
61 - * @return void
45 + * @param array $atts
62 46 */
63 47 private function _set( $param, $atts ) {
64 48 if ( isset( $atts[ $param ] ) ) {
65 49 $this->{$param} = $atts[ $param ];
@@ -69,10 +53,8 @@
69 53 /**
70 54 * @since 3.0
71 55 *
72 56 * @param array $atts
73 - *
74 - * @return void
75 57 */
76 58 private function set_html( $atts ) {
77 59 $this->set_from_field(
78 60 $atts,
@@ -86,10 +68,8 @@
86 68 /**
87 69 * @since 3.0
88 70 *
89 71 * @param array $atts
90 - *
91 - * @return void
92 72 */
93 73 private function set_field_id( $atts ) {
94 74 $this->set_from_field(
95 75 $atts,
@@ -103,16 +83,13 @@
103 83 /**
104 84 * @since 3.0
105 85 *
106 86 * @param array $atts
107 - *
108 - * @return void
109 87 */
110 88 private function set_pass_args( $atts ) {
111 89 $this->pass_args = $atts;
112 90
113 91 $exclude = array( 'field_obj', 'html' );
114 -
115 92 foreach ( $exclude as $ex ) {
116 93 if ( isset( $atts[ $ex ] ) ) {
117 94 unset( $this->pass_args[ $ex ] );
118 95 }
@@ -123,10 +100,8 @@
123 100 * @since 3.0
124 101 *
125 102 * @param array $atts
126 103 * @param array $set
127 - *
128 - * @return void
129 104 */
130 105 private function set_from_field( $atts, $set ) {
131 106 if ( isset( $atts[ $set['param'] ] ) ) {
132 107 $this->{$set['param']} = $atts[ $set['param'] ];
@@ -134,11 +109,8 @@
134 109 $this->{$set['param']} = $this->field_obj->get_field_column( $set['default'] );
135 110 }
136 111 }
137 112
138 - /**
139 - * @return string
140 - */
141 113 public function get_html() {
142 114 $this->replace_shortcodes_before_input();
143 115 $this->replace_shortcodes_with_atts();
144 116 $this->replace_shortcodes_after_input();
@@ -147,10 +119,8 @@
147 119 }
148 120
149 121 /**
150 122 * @since 3.0
151 - *
152 - * @return void
153 123 */
154 124 private function replace_shortcodes_before_input() {
155 125 $this->html = apply_filters( 'frm_before_replace_shortcodes', $this->html, $this->field_obj->get_field(), $this->pass_args['errors'], $this->form );
156 126
@@ -172,29 +142,25 @@
172 142 }
173 143
174 144 /**
175 145 * @since 3.0
176 - *
177 - * @return void
178 146 */
179 147 private function replace_field_values() {
180 - // Replace [id].
148 + //replace [id]
181 149 $this->html = str_replace( '[id]', $this->field_id, $this->html );
182 150
183 151 // set the label for
184 152 $this->html = str_replace( 'field_[key]', $this->html_id, $this->html );
185 153
186 - // Replace [key].
154 + //replace [key]
187 155 $this->html = str_replace( '[key]', $this->field_obj->get_field_column( 'field_key' ), $this->html );
188 156
189 - // Replace [field_name].
157 + //replace [field_name]
190 158 $this->html = str_replace( '[field_name]', FrmAppHelper::maybe_kses( $this->field_obj->get_field_column( 'name' ) ), $this->html );
191 159 }
192 160
193 161 /**
194 162 * @since 3.0
195 - *
196 - * @return void
197 163 */
198 164 private function replace_required_label_shortcode() {
199 165 $required = FrmField::is_required( $this->field_obj->get_field() ) ? $this->field_obj->get_field_column( 'required_indicator' ) : '';
200 166 FrmShortcodeHelper::remove_inline_conditions( ! empty( $required ), 'required_label', $required, $this->html );
@@ -204,17 +170,12 @@
204 170 * If this is an HTML field, the values are included in the description.
205 171 * In this case, we don't want to run the wp shortcodes with the description included.
206 172 *
207 173 * @since 3.0
208 - *
209 - * @param bool $wp_processed
210 - *
211 - * @return void
212 174 */
213 175 private function maybe_replace_description_shortcode( $wp_processed = false ) {
214 176 $is_html = 'html' === $this->field_obj->get_field_column( 'type' );
215 177 $should_replace = ( $is_html && $wp_processed ) || ( ! $is_html && ! $wp_processed );
216 -
217 178 if ( $should_replace ) {
218 179 $this->replace_description_shortcode();
219 180 }
220 181 }
@@ -220,10 +181,8 @@
220 181 }
221 182
222 183 /**
223 184 * @since 3.0
224 - *
225 - * @return void
226 185 */
227 186 private function replace_description_shortcode() {
228 187 $this->maybe_add_description_id();
229 188 $description = FrmAppHelper::maybe_kses( $this->field_obj->get_field_column( 'description' ) );
@@ -234,14 +193,11 @@
234 193 * Add an ID to the description for aria-describedby.
235 194 * This ID was added to the HTML in v3.0.
236 195 *
237 196 * @since 3.0
238 - *
239 - * @return void
240 197 */
241 198 private function maybe_add_description_id() {
242 199 $description = $this->field_obj->get_field_column( 'description' );
243 -
244 200 if ( $description != '' ) {
245 201 $this->add_element_id( 'description', 'desc' );
246 202 }
247 203 }
@@ -249,17 +205,11 @@
249 205 /**
250 206 * Insert an ID if it doesn't exist.
251 207 *
252 208 * @since 3.06.02
253 - *
254 - * @param string $param
255 - * @param string $id
256 - *
257 - * @return void
258 209 */
259 210 private function add_element_id( $param, $id ) {
260 211 preg_match_all( '/(\[if\s+' . $param . '\])(.*?)(\[\/if\s+' . $param . '\])/mis', $this->html, $inner_html );
261 -
262 212 if ( ! isset( $inner_html[2] ) ) {
263 213 return;
264 214 }
265 215
@@ -268,11 +218,10 @@
268 218 }
269 219
270 220 if ( is_string( $inner_html[2] ) ) {
271 221 $has_id = strpos( $inner_html[2], ' id=' );
272 -
273 222 if ( ! $has_id ) {
274 - $id = 'frm_' . $id . '_' . $this->html_id;
223 + $id = 'frm_' . $id . '_' . $this->html_id;
275 224 $this->html = str_replace( 'class="frm_' . $param, 'id="' . esc_attr( $id ) . '" class="frm_' . esc_attr( $param ), $this->html );
276 225 }
277 226 }
278 227 }
@@ -278,18 +227,15 @@
278 227 }
279 228
280 229 /**
281 230 * @since 3.0
282 - *
283 - * @return void
284 231 */
285 232 private function replace_error_shortcode() {
286 233 $this->maybe_add_error_id();
287 - $error = $this->pass_args['errors'][ 'field' . $this->field_id ] ?? false;
234 + $error = isset( $this->pass_args['errors'][ 'field' . $this->field_id ] ) ? $this->pass_args['errors'][ 'field' . $this->field_id ] : false;
288 235
289 236 if ( ! empty( $error ) && false === strpos( $this->html, 'role="alert"' ) && FrmAppHelper::should_include_alert_role_on_field_errors() ) {
290 237 $error_body = self::get_error_body( $this->html );
291 -
292 238 if ( is_string( $error_body ) && false === strpos( $error_body, 'role=' ) ) {
293 239 $new_error_body = preg_replace( '/class="frm_error/', 'role="alert" class="frm_error', $error_body, 1 );
294 240 $this->html = str_replace( '[if error]' . $error_body . '[/if error]', '[if error]' . $new_error_body . '[/if error]', $this->html );
295 241 }
@@ -301,20 +247,17 @@
301 247 /**
302 248 * Pull the HTML between [if error] and [/if error] shortcodes.
303 249 *
304 250 * @param string $html
305 - *
306 - * @return false|string
251 + * @return string|false
307 252 */
308 253 private static function get_error_body( $html ) {
309 254 $start = strpos( $html, '[if error]' );
310 -
311 255 if ( false === $start ) {
312 256 return false;
313 257 }
314 258
315 259 $end = strpos( $html, '[/if error]', $start );
316 -
317 260 if ( false === $end ) {
318 261 return false;
319 262 }
320 263
@@ -326,10 +269,8 @@
326 269 * Add an ID to the error message for aria-describedby.
327 270 * This ID was added to the HTML in v3.06.02.
328 271 *
329 272 * @since 3.06.02
330 - *
331 - * @return void
332 273 */
333 274 private function maybe_add_error_id() {
334 275 if ( ! isset( $this->pass_args['errors'][ 'field' . $this->field_id ] ) ) {
335 276 return;
@@ -341,10 +282,8 @@
341 282 /**
342 283 * Replace [required_class]
343 284 *
344 285 * @since 3.0
345 - *
346 - * @return void
347 286 */
348 287 private function replace_required_class() {
349 288 $required_class = FrmField::is_required( $this->field_obj->get_field() ) ? ' frm_required_field' : '';
350 289 $this->html = str_replace( '[required_class]', $required_class, $this->html );
@@ -351,19 +290,17 @@
351 290 }
352 291
353 292 /**
354 293 * @since 3.0
355 - *
356 - * @return void
357 294 */
358 295 private function replace_form_shortcodes() {
359 296 if ( ! empty( $this->form ) ) {
360 297 $form = (array) $this->form;
361 298
362 - // Replace [form_key].
299 + //replace [form_key]
363 300 $this->html = str_replace( '[form_key]', $form['form_key'], $this->html );
364 301
365 - // Replace [form_name].
302 + //replace [form_name]
366 303 $this->html = str_replace( '[form_name]', $form['name'], $this->html );
367 304 }
368 305 }
369 306
@@ -368,10 +305,8 @@
368 305 }
369 306
370 307 /**
371 308 * @since 3.0
372 - *
373 - * @return void
374 309 */
375 310 public function replace_shortcodes_after_input() {
376 311 $this->html .= "\n";
377 312
@@ -382,15 +317,13 @@
382 317 }
383 318
384 319 /**
385 320 * @since 3.0
386 - *
387 - * @return void
388 321 */
389 322 private function filter_for_more_shortcodes() {
390 323 $atts = $this->pass_args;
391 324
392 - // If field is not in repeating section.
325 + //If field is not in repeating section
393 326 if ( empty( $atts['section_id'] ) ) {
394 327 $atts = array(
395 328 'errors' => $this->pass_args['errors'],
396 329 'form' => $this->form,
@@ -404,10 +337,8 @@
404 337 *
405 338 * @since 3.0
406 339 *
407 340 * @param string $html
408 - *
409 - * @return void
410 341 */
411 342 public function remove_collapse_shortcode( &$html ) {
412 343 if ( strpos( $html, '[collapse_this]' ) ) {
413 344 $html = str_replace( '[collapse_this]', '', $html );
@@ -415,10 +346,8 @@
415 346 }
416 347
417 348 /**
418 349 * @since 3.0
419 - *
420 - * @return void
421 350 */
422 351 private function replace_shortcodes_with_atts() {
423 352 preg_match_all( "/\[(input|deletelink)\b(.*?)(?:(\/))?\]/s", $this->html, $shortcodes, PREG_PATTERN_ORDER );
424 353
@@ -427,11 +356,11 @@
427 356 $tag = FrmShortcodeHelper::get_shortcode_tag( $shortcodes, $short_key );
428 357
429 358 $replace_with = '';
430 359
431 - if ( $tag === 'deletelink' && FrmAppHelper::pro_is_installed() ) {
360 + if ( $tag == 'deletelink' && FrmAppHelper::pro_is_installed() ) {
432 361 $replace_with = FrmProEntriesController::entry_delete_link( $shortcode_atts );
433 - } elseif ( $tag === 'input' ) {
362 + } elseif ( $tag == 'input' ) {
434 363 $replace_with = $this->replace_input_shortcode( $shortcode_atts );
435 364 }
436 365
437 366 $this->html = str_replace( $shortcodes[0][ $short_key ], $replace_with, $this->html );
@@ -455,12 +384,12 @@
455 384 * @return array
456 385 */
457 386 private function prepare_input_shortcode_atts( $shortcode_atts ) {
458 387 if ( isset( $shortcode_atts['opt'] ) ) {
459 - --$shortcode_atts['opt'];
388 + $shortcode_atts['opt'] --;
460 389 }
461 390
462 - $field_class = $shortcode_atts['class'] ?? '';
391 + $field_class = isset( $shortcode_atts['class'] ) ? $shortcode_atts['class'] : '';
463 392 $this->field_obj->set_field_column( 'input_class', $field_class );
464 393
465 394 if ( isset( $shortcode_atts['class'] ) ) {
466 395 unset( $shortcode_atts['class'] );
@@ -465,9 +394,9 @@
465 394 if ( isset( $shortcode_atts['class'] ) ) {
466 395 unset( $shortcode_atts['class'] );
467 396 }
468 397
469 - $this->field_obj->set_aria_invalid_error( $shortcode_atts, $this->pass_args );
398 + $shortcode_atts['aria-invalid'] = isset( $this->pass_args['errors'][ 'field' . $this->field_id ] ) ? 'true' : 'false';
470 399
471 400 $this->field_obj->set_field_column( 'shortcodes', $shortcode_atts );
472 401
473 402 return $shortcode_atts;
@@ -477,10 +406,8 @@
477 406 * Add the label position class into the HTML
478 407 * If the label position is inside, add a class to show the label if the field has a value.
479 408 *
480 409 * @since 3.0
481 - *
482 - * @return void
483 410 */
484 411 private function add_class_to_label() {
485 412 $label_class = $this->field_obj->get_label_class();
486 413 $this->html = str_replace( '[label_position]', $label_class, $this->html );
@@ -489,10 +416,8 @@
489 416 /**
490 417 * Replace [entry_key]
491 418 *
492 419 * @since 3.0
493 - *
494 - * @return void
495 420 */
496 421 private function replace_entry_key() {
497 422 $entry_key = FrmAppHelper::simple_get( 'entry', 'sanitize_title' );
498 423 $this->html = str_replace( '[entry_key]', $entry_key, $this->html );
@@ -501,21 +426,17 @@
501 426 /**
502 427 * Add classes to a field div
503 428 *
504 429 * @since 3.0
505 - *
506 - * @return void
507 430 */
508 431 private function add_field_div_classes() {
509 432 $classes = $this->get_field_div_classes();
510 433
511 - if ( in_array( $this->field_obj->get_field_column( 'type' ), array( 'html', 'summary' ), true ) && strpos( $this->html, '[error_class]' ) === false ) {
434 + if ( $this->field_obj->get_field_column( 'type' ) == 'html' && strpos( $this->html, '[error_class]' ) === false ) {
512 435 // there is no error_class shortcode for HTML fields
513 - $this->html = str_replace( 'class="frm_form_field', 'class="frm_form_field ' . esc_attr( $classes ), $this->html );
514 - return;
436 + $this->html = str_replace( 'class="frm_form_field', 'class="frm_form_field ' . $classes, $this->html );
515 437 }
516 -
517 - $this->html = str_replace( '[error_class]', esc_attr( $classes ), $this->html );
438 + $this->html = str_replace( '[error_class]', $classes, $this->html );
518 439 }
519 440
520 441 /**
521 442 * Get the classes for a field div
@@ -529,12 +450,11 @@
529 450 $classes = isset( $this->pass_args['errors'][ 'field' . $this->field_id ] ) ? ' frm_blank_field' : '';
530 451
531 452 // Add label position class
532 453 $settings = $this->field_obj->display_field_settings();
533 -
534 454 if ( isset( $settings['label_position'] ) && $settings['label_position'] ) {
535 455 $label_position = $this->field_obj->get_field_column( 'label' );
536 - $classes .= ' frm_' . $label_position . '_container';
456 + $classes .= ' frm_' . $label_position . '_container';
537 457
538 458 // Add class if field has value, to be used for floating label styling.
539 459 if ( 'inside' === $label_position && $this->field_obj->get_field_column( 'value' ) ) {
540 460 $classes .= ' frm_label_float_top';
@@ -542,14 +462,12 @@
542 462 }
543 463
544 464 // Add CSS layout classes
545 465 $extra_classes = $this->field_obj->get_field_column( 'classes' );
546 -
547 466 if ( ! empty( $extra_classes ) ) {
548 467 if ( ! strpos( $this->html, 'frm_form_field ' ) ) {
549 468 $classes .= ' frm_form_field';
550 469 }
551 -
552 470 $classes .= ' ' . $extra_classes;
553 471 }
554 472
555 473 $classes .= $this->field_obj->get_container_class();
@@ -554,14 +472,9 @@
554 472
555 473 $classes .= $this->field_obj->get_container_class();
556 474
557 475 // Get additional classes
558 - $classes = apply_filters( 'frm_field_div_classes', $classes, $this->field_obj->get_field(), array( 'field_id' => $this->field_id ) );
559 -
560 - // Remove unexpected characters from class.
561 - $classes = implode( ' ', array_map( 'FrmFormsHelper::sanitize_layout_class', explode( ' ', $classes ) ) );
562 -
563 - return $classes;
476 + return apply_filters( 'frm_field_div_classes', $classes, $this->field_obj->get_field(), array( 'field_id' => $this->field_id ) );
564 477 }
565 478
566 479 /**
567 480 * This filters shortcodes in the field HTML
@@ -566,10 +479,8 @@
566 479 /**
567 480 * This filters shortcodes in the field HTML
568 481 *
569 482 * @since 3.0
570 - *
571 - * @return void
572 483 */
573 484 private function process_wp_shortcodes() {
574 485 if ( apply_filters( 'frm_do_html_shortcodes', true ) ) {
575 486 $this->html = do_shortcode( $this->html );
@@ -579,9 +490,8 @@
579 490 /**
580 491 * Adds multiple input attributes.
581 492 *
582 493 * @since 6.4.1
583 - *
584 494 * @return void
585 495 */
586 496 private function add_multiple_input_attributes() {
587 497 $field_type = $this->field_obj->get_field_column( 'type' );
@@ -607,13 +517,8 @@
607 517
608 518 // Add 'aria-required' attribute to the field if required.
609 519 if ( $is_radio && '1' === $field['required'] ) {
610 520 $attributes['aria-required'] = 'true';
611 - }
612 -
613 - // Add 'aria-invalid' attribute to the group if there are errors.
614 - if ( isset( $this->pass_args['errors'][ 'field' . $this->field_id ] ) ) {
615 - $attributes['aria-invalid'] = 'true';
616 521 }
617 522
618 523 // Concatenate attributes into a string, and replace the role="group" in the HTML with the attributes string.
619 524 $html_attributes = FrmAppHelper::array_to_html_params( $attributes );