PluginProbe
Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More / 6.10
Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More v6.10
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/controllers/FrmStylesController.php +118 -35 6.56.10 View file →
@@ -5,19 +5,19 @@
5 5
6 6 class FrmStylesController {
7 7
8 8 /**
9 - * @var string $post_type
9 + * @var string
10 10 */
11 11 public static $post_type = 'frm_styles';
12 12
13 13 /**
14 - * @var string $screen
14 + * @var string
15 15 */
16 16 public static $screen = 'formidable_page_formidable-styles';
17 17
18 18 /**
19 - * @var string|null $message
19 + * @var string|null
20 20 */
21 21 private static $message;
22 22
23 23 public static function load_pro_hooks() {
@@ -152,9 +152,9 @@
152 152 'frm_update_settings',
153 153 /**
154 154 * Update the form data on the "Manage Styles" tab after global settings are saved.
155 155 */
156 - function() {
156 + function () {
157 157 self::manage_styles();
158 158 }
159 159 );
160 160 }
@@ -191,9 +191,9 @@
191 191 wp_register_style( $css_key, $file, array(), $this_version );
192 192 }
193 193
194 194 $load_on_all = ! FrmAppHelper::is_admin() && 'all' === $frm_settings->load_style;
195 - if ( $load_on_all || $register != 'register' ) {
195 + if ( $load_on_all || $register !== 'register' ) {
196 196 wp_enqueue_style( $css_key );
197 197 }
198 198 unset( $css_key, $file );
199 199 }
@@ -200,9 +200,9 @@
200 200
201 201 if ( $frm_settings->load_style === 'all' ) {
202 202 $frm_vars['css_loaded'] = true;
203 203 }
204 - }
204 + }//end if
205 205 unset( $css );
206 206
207 207 add_filter( 'style_loader_tag', 'FrmStylesController::add_tags_to_css', 10, 2 );
208 208 }
@@ -264,10 +264,15 @@
264 264
265 265 return $this_version;
266 266 }
267 267
268 + /**
269 + * @param string $tag
270 + * @param string $handle
271 + * @return string
272 + */
268 273 public static function add_tags_to_css( $tag, $handle ) {
269 - if ( ( 'formidable' == $handle || 'jquery-theme' == $handle ) && strpos( $tag, ' property=' ) === false ) {
274 + if ( ( 'formidable' === $handle || 'jquery-theme' === $handle ) && strpos( $tag, ' property=' ) === false ) {
270 275 $frm_settings = FrmAppHelper::get_settings();
271 276 if ( $frm_settings->use_html ) {
272 277 $tag = str_replace( ' type="', ' property="stylesheet" type="', $tag );
273 278 }
@@ -399,11 +404,12 @@
399 404
400 405 if ( ! $form_id ) {
401 406 // TODO: Show a message why a random form is being shown (because no form is assigned to the style).
402 407 // Fallback to any form.
403 - $where = array(
408 + $where = array(
404 409 'status' => 'published',
405 - 'parent_form_id' => array( null, 0 ), // Make sure it's not a repeater.
410 + // Make sure it's not a repeater.
411 + 'parent_form_id' => array( null, 0 ),
406 412 );
407 413 $form_id = FrmDb::get_var( 'frm_forms', $where, 'id' );
408 414 }
409 415
@@ -417,9 +423,9 @@
417 423 */
418 424 private static function disable_admin_page_styling_on_submit_buttons() {
419 425 add_filter(
420 426 'frm_submit_button_class',
421 - function( $classes ) {
427 + function ( $classes ) {
422 428 $classes[] = 'frm_no_style_button';
423 429 return $classes;
424 430 }
425 431 );
@@ -463,15 +469,15 @@
463 469 * @param int $style_id
464 470 */
465 471 $style_id = apply_filters( 'frm_saved_form_style_id', $style_id );
466 472
467 - if ( ! $style_id && '0' !== FrmAppHelper::get_post_param( 'style_id', 'sanitize_text_field', '' ) ) {
473 + if ( ! $style_id && '0' !== FrmAppHelper::get_post_param( 'style_id', '', 'sanitize_text_field' ) ) {
468 474 // "0" is a special value used for the enable/disable toggle.
469 475 wp_die( esc_html__( 'Invalid style value', 'formidable' ), esc_html__( 'Invalid style value', 'formidable' ), 400 );
470 476 return;
471 477 }
472 478
473 - $form_id = FrmAppHelper::get_post_param( 'form_id', 'absint', 0 );
479 + $form_id = FrmAppHelper::get_post_param( 'form_id', 0, 'absint' );
474 480 if ( ! $form_id ) {
475 481 wp_die( esc_html__( 'No form specified', 'formidable' ), esc_html__( 'No form specified', 'formidable' ), 400 );
476 482 return;
477 483 }
@@ -489,9 +495,10 @@
489 495 if ( $style_id === $default_style->ID && empty( $form->options['chat'] ) ) {
490 496 $style_id = 1;
491 497 }
492 498
493 - $form->options['custom_style'] = (string) $style_id; // We want to save a string for consistency. FrmStylesHelper::get_form_count_for_style expects the custom style ID is a string.
499 + // We want to save a string for consistency. FrmStylesHelper::get_form_count_for_style expects the custom style ID is a string.
500 + $form->options['custom_style'] = (string) $style_id;
494 501
495 502 global $wpdb;
496 503 $wpdb->update( $wpdb->prefix . 'frm_forms', array( 'options' => maybe_serialize( $form->options ) ), array( 'id' => $form->id ) );
497 504
@@ -533,8 +540,9 @@
533 540 wp_print_styles( 'formidable_style' );
534 541
535 542 wp_print_styles( 'formidable' );
536 543 wp_enqueue_script( 'formidable_style' );
544 + wp_set_script_translations( 'formidable_style', 'formidable' );
537 545 }
538 546
539 547 /**
540 548 * Render the style page (with a more limited and typed scope than calling it from self::style directly).
@@ -541,9 +549,8 @@
541 549 *
542 550 * @since 6.0
543 551 *
544 552 * @param stdClass|WP_Post $active_style
545 - * @param array<WP_Post> $styles
546 553 * @param stdClass $form
547 554 * @param WP_Post $default_style
548 555 * @return void
549 556 */
@@ -548,13 +555,15 @@
548 555 * @return void
549 556 */
550 557 private static function render_style_page( $active_style, $form, $default_style ) {
551 558 $style_views_path = self::get_views_path();
552 - $view = FrmAppHelper::simple_get( 'frm_action', 'sanitize_text_field', 'list' ); // edit, list (default), new_style.
553 - $frm_style = new FrmStyle( $active_style->ID );
559 + // Edit, list (default), new_style.
560 + $view = FrmAppHelper::simple_get( 'frm_action', 'sanitize_text_field', 'list' );
561 + $frm_style = new FrmStyle( $active_style->ID );
554 562
555 563 if ( 'new_style' !== $view && ! FrmAppHelper::simple_get( 'form' ) && ! FrmAppHelper::simple_get( 'style_id' ) ) {
556 - $view = 'edit'; // Have the Appearance > Forms link fallback to the edit view. Otherwise we want to use 'list' as the default.
564 + // Have the Appearance > Forms link fallback to the edit view. Otherwise we want to use 'list' as the default.
565 + $view = 'edit';
557 566 }
558 567
559 568 if ( in_array( $view, array( 'edit', 'new_style', 'duplicate' ), true ) ) {
560 569 self::add_meta_boxes();
@@ -617,21 +626,21 @@
617 626 * Filter form classes so the form uses the preview style, not the form's active style.
618 627 *
619 628 * @since 6.0
620 629 *
621 - * @param WP_Post|stdClass $style A new style is not a WP_Post object.
630 + * @param stdClass|WP_Post $style A new style is not a WP_Post object.
622 631 * @return void
623 632 */
624 633 private static function force_form_style( $style ) {
625 634 add_filter(
626 635 'frm_add_form_style_class',
627 - function( $class ) use ( $style ) {
628 - $split = array_filter(
636 + function ( $class ) use ( $style ) {
637 + $split = array_filter(
629 638 explode( ' ', $class ),
630 639 /**
631 640 * @param string $class
632 641 */
633 - function( $class ) {
642 + function ( $class ) {
634 643 return $class && 0 !== strpos( $class, 'frm_style_' );
635 644 }
636 645 );
637 646 $split[] = 'frm_style_' . $style->post_name;
@@ -648,9 +657,8 @@
648 657 * @return void
649 658 */
650 659 public static function save_style() {
651 660 $frm_style = new FrmStyle();
652 - $message = '';
653 661 $post_id = FrmAppHelper::get_post_param( 'ID', false, 'sanitize_title' );
654 662 $style_nonce = FrmAppHelper::get_post_param( 'frm_style', '', 'sanitize_text_field' );
655 663
656 664 if ( $post_id === false || ! wp_verify_nonce( $style_nonce, 'frm_style_nonce' ) ) {
@@ -661,9 +669,10 @@
661 669
662 670 $id = $frm_style->update( $post_id );
663 671 if ( ! $post_id && $id ) {
664 672 self::maybe_redirect_after_save( $id );
665 - $post_id = reset( $id ); // Set the post id to the new style so it will be loaded for editing.
673 + // Set the post id to the new style so it will be loaded for editing.
674 + $post_id = reset( $id );
666 675 }
667 676
668 677 self::$message = __( 'Your styling settings have been saved.', 'formidable' );
669 678 }
@@ -706,9 +715,9 @@
706 715 return;
707 716 }
708 717
709 718 parse_str( $query, $parsed_query );
710 - $form_id = ! empty( $parsed_query['form'] ) ? absint( $parsed_query['form'] ) : 0;
719 + $form_id = ! empty( $parsed_query['form'] ) ? absint( $parsed_query['form'] ) : 0;
711 720
712 721 $style = new stdClass();
713 722 $style->ID = end( $ids );
714 723 wp_safe_redirect( esc_url_raw( FrmStylesHelper::get_edit_url( $style, $form_id ) ) );
@@ -744,10 +753,10 @@
744 753 global $wpdb;
745 754
746 755 $forms = FrmForm::get_published_forms();
747 756 foreach ( $forms as $form ) {
748 - $new_style = ( isset( $_POST['style'] ) && isset( $_POST['style'][ $form->id ] ) ) ? sanitize_text_field( wp_unslash( $_POST['style'][ $form->id ] ) ) : ''; // phpcs:ignore WordPress.Security.NonceVerification.Missing
749 - $previous_style = ( isset( $_POST['prev_style'] ) && isset( $_POST['prev_style'][ $form->id ] ) ) ? sanitize_text_field( wp_unslash( $_POST['prev_style'][ $form->id ] ) ) : ''; // phpcs:ignore WordPress.Security.NonceVerification.Missing
757 + $new_style = isset( $_POST['style'] ) && isset( $_POST['style'][ $form->id ] ) ? sanitize_text_field( wp_unslash( $_POST['style'][ $form->id ] ) ) : ''; // phpcs:ignore WordPress.Security.NonceVerification.Missing
758 + $previous_style = isset( $_POST['prev_style'] ) && isset( $_POST['prev_style'][ $form->id ] ) ? sanitize_text_field( wp_unslash( $_POST['prev_style'][ $form->id ] ) ) : ''; // phpcs:ignore WordPress.Security.NonceVerification.Missing
750 759 if ( $new_style == $previous_style ) {
751 760 continue;
752 761 }
753 762
@@ -895,9 +904,10 @@
895 904 );
896 905 global $wpdb;
897 906 $wpdb->update( $wpdb->posts, array( 'post_content' => $default_post_content ), $where );
898 907
899 - $frm_style->save_settings(); // Save the settings after resetting to default or the old style will still appear.
908 + // Save the settings after resetting to default or the old style will still appear.
909 + $frm_style->save_settings();
900 910
901 911 $data = array(
902 912 'style' => FrmStylesCardHelper::get_style_param_for_card( $frm_style->get_new() ),
903 913 );
@@ -916,11 +926,13 @@
916 926 FrmAppHelper::permission_check( 'frm_change_settings' );
917 927 check_ajax_referer( 'frm_ajax', 'nonce' );
918 928
919 929 $frm_style = new FrmStyle();
920 - $defaults = array(); // Intentionally avoid defaults here so nothing gets removed from our style.
921 - $style = '';
922 930
931 + // Intentionally avoid defaults here so nothing gets removed from our style.
932 + $defaults = array();
933 + $style = '';
934 +
923 935 echo '<style type="text/css">';
924 936 include FrmAppHelper::plugin_path() . '/css/_single_theme.css.php';
925 937 echo '</style>';
926 938 wp_die();
@@ -1078,9 +1090,9 @@
1078 1090 return;
1079 1091 }
1080 1092
1081 1093 $frm_settings = FrmAppHelper::get_settings();
1082 - if ( $frm_settings->load_style != 'none' ) {
1094 + if ( $frm_settings->load_style !== 'none' ) {
1083 1095 wp_enqueue_style( 'formidable' );
1084 1096 $frm_vars['css_loaded'] = true;
1085 1097 }
1086 1098 }
@@ -1099,9 +1111,9 @@
1099 1111
1100 1112 /**
1101 1113 * Get the style post object for a target form.
1102 1114 *
1103 - * @param object|string|boolean $form
1115 + * @param bool|object|string $form
1104 1116 * @return WP_Post|null
1105 1117 */
1106 1118 public static function get_form_style( $form = 'default' ) {
1107 1119 $style = FrmFormsHelper::get_form_style( $form );
@@ -1134,12 +1146,11 @@
1134 1146 return $class;
1135 1147 }
1136 1148
1137 1149 /**
1150 + * @since 3.0
1138 1151 * @param object $style
1139 1152 * @param string $class
1140 - *
1141 - * @since 3.0
1142 1153 */
1143 1154 private static function maybe_add_rtl_class( $style, &$class ) {
1144 1155 $is_rtl = isset( $style->post_content['direction'] ) && 'rtl' === $style->post_content['direction'];
1145 1156 if ( $is_rtl ) {
@@ -1184,10 +1195,82 @@
1184 1195
1185 1196 return $important;
1186 1197 }
1187 1198
1188 - public static function do_accordion_sections( $screen, $context, $object ) {
1189 - return do_accordion_sections( $screen, $context, $object );
1199 + /**
1200 + * Duplicate of WordPress do_accordion_section function, it adds an additional svg icon support.
1201 + *
1202 + * @since 6.8.3
1203 + *
1204 + * @return int
1205 + */
1206 + public static function do_accordion_sections( $screen, $context, $data_object ) {
1207 + global $wp_meta_boxes;
1208 +
1209 + // the symbol id from icons.svg
1210 + $icon_ids = array(
1211 + 'ranking-fields-style' => 'frm_chart_bar_icon',
1212 + 'section-fields-style' => 'frm-form-title-style',
1213 + );
1214 +
1215 + wp_enqueue_script( 'accordion' );
1216 +
1217 + if ( empty( $screen ) ) {
1218 + $screen = get_current_screen();
1219 + } elseif ( is_string( $screen ) ) {
1220 + $screen = convert_to_screen( $screen );
1221 + }
1222 +
1223 + $page = $screen->id;
1224 +
1225 + ?>
1226 + <div id="side-sortables" class="accordion-container">
1227 + <ul class="outer-border">
1228 + <?php
1229 + $i = 0;
1230 + $first_open = false;
1231 +
1232 + if ( isset( $wp_meta_boxes[ $page ][ $context ] ) ) {
1233 + foreach ( array( 'high', 'core', 'default', 'low' ) as $priority ) {
1234 + if ( isset( $wp_meta_boxes[ $page ][ $context ][ $priority ] ) ) {
1235 + foreach ( $wp_meta_boxes[ $page ][ $context ][ $priority ] as $box ) {
1236 + if ( false === $box || ! $box['title'] ) {
1237 + continue;
1238 + }
1239 +
1240 + ++$i;
1241 + $icon_id = array_key_exists( $box['id'], $icon_ids ) ? $icon_ids[ $box['id'] ] : 'frm-' . $box['id'];
1242 +
1243 + $open_class = '';
1244 + if ( ! $first_open ) {
1245 + $first_open = true;
1246 + $open_class = 'open';
1247 + }
1248 + ?>
1249 + <li class="control-section accordion-section <?php echo esc_attr( $open_class ); ?> <?php echo esc_attr( $box['id'] ); ?>" id="<?php echo esc_attr( $box['id'] ); ?>">
1250 + <h3 class="accordion-section-title hndle" tabindex="0">
1251 + <?php
1252 + FrmAppHelper::icon_by_class( 'frmfont ' . $icon_id );
1253 + echo esc_html( $box['title'] );
1254 + FrmAppHelper::icon_by_class( 'frmfont frm_arrowdown8_icon' );
1255 + ?>
1256 + </h3>
1257 + <div class="accordion-section-content <?php postbox_classes( $box['id'], $page ); ?>">
1258 + <div class="inside">
1259 + <?php call_user_func( $box['callback'], $data_object, $box ); ?>
1260 + </div><!-- .inside -->
1261 + </div><!-- .accordion-section-content -->
1262 + </li><!-- .accordion-section -->
1263 + <?php
1264 + }//end foreach
1265 + }//end if
1266 + }//end foreach
1267 + }//end if
1268 + ?>
1269 + </ul><!-- .outer-border -->
1270 + </div><!-- .accordion-container -->
1271 + <?php
1272 + return $i;
1190 1273 }
1191 1274
1192 1275 /**
1193 1276 * Rename a style via an AJAX action.