PluginProbe
Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More / 6.8
Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More v6.8
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 +44 -138 6.256.8 View file →
@@ -5,19 +5,19 @@
5 5
6 6 class FrmStylesController {
7 7
8 8 /**
9 - * @var string
9 + * @var string $post_type
10 10 */
11 11 public static $post_type = 'frm_styles';
12 12
13 13 /**
14 - * @var string
14 + * @var string $screen
15 15 */
16 16 public static $screen = 'formidable_page_formidable-styles';
17 17
18 18 /**
19 - * @var string|null
19 + * @var string|null $message
20 20 */
21 21 private static $message;
22 22
23 23 public static function load_pro_hooks() {
@@ -95,9 +95,9 @@
95 95 *
96 96 * @return void
97 97 */
98 98 private static function disable_form_css() {
99 - add_filter( 'get_frm_stylesheet', '__return_empty_array' );
99 + add_filter( 'get_frm_stylesheet', '__return_false' );
100 100 }
101 101
102 102 /**
103 103 * Removing this action prevents front end JavaScript from loading.
@@ -119,12 +119,12 @@
119 119 if ( ! FrmAppHelper::is_style_editor_page() ) {
120 120 return;
121 121 }
122 122
123 - FrmStyleComponent::register_assets();
124 123 self::load_pro_hooks();
125 124
126 125 $version = FrmAppHelper::plugin_version();
126 + wp_enqueue_script( 'jquery-ui-datepicker' );
127 127
128 128 if ( FrmAppHelper::is_style_editor_page( 'edit' ) ) {
129 129 wp_enqueue_style( 'wp-color-picker' );
130 130 }
@@ -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 }
@@ -264,17 +264,14 @@
264 264
265 265 return $this_version;
266 266 }
267 267
268 - /**
269 - * @param string $tag
270 - * @param string $handle
271 - * @return string
272 - */
273 268 public static function add_tags_to_css( $tag, $handle ) {
274 - if ( ( 'formidable' === $handle || 'jquery-theme' === $handle ) && strpos( $tag, ' property=' ) === false ) {
269 + if ( ( 'formidable' == $handle || 'jquery-theme' == $handle ) && strpos( $tag, ' property=' ) === false ) {
275 270 $frm_settings = FrmAppHelper::get_settings();
276 - $tag = str_replace( ' type="', ' property="stylesheet" type="', $tag );
271 + if ( $frm_settings->use_html ) {
272 + $tag = str_replace( ' type="', ' property="stylesheet" type="', $tag );
273 + }
277 274 }
278 275
279 276 return $tag;
280 277 }
@@ -323,15 +320,9 @@
323 320 self::setup_styles_and_scripts_for_styler();
324 321
325 322 $style_id = self::get_style_id_for_styler();
326 323 if ( ! $style_id ) {
327 - $error_args = array(
328 - 'title' => __( 'No styles', 'formidable' ),
329 - 'body' => __( 'You must have a style to use the Visual Styler.', 'formidable' ),
330 - 'cancel_url' => admin_url( 'admin.php?page=formidable' ),
331 - );
332 - FrmAppController::show_error_modal( $error_args );
333 - return;
324 + wp_die( esc_html__( 'Invalid route', 'formidable' ), esc_html__( 'Invalid route', 'formidable' ), 400 );
334 325 }
335 326
336 327 $form_id = FrmAppHelper::simple_get( 'form', 'absint', 0 );
337 328 if ( ! $form_id ) {
@@ -338,17 +329,10 @@
338 329 $form_id = self::get_form_id_for_style( $style_id );
339 330 }
340 331
341 332 $form = FrmForm::getOne( $form_id );
342 -
343 333 if ( ! is_object( $form ) ) {
344 - $error_args = array(
345 - 'title' => __( 'No forms', 'formidable' ),
346 - 'body' => __( 'You must have a form to use the Visual Styler.', 'formidable' ),
347 - 'cancel_url' => admin_url( 'admin.php?page=formidable' ),
348 - );
349 - FrmAppController::show_error_modal( $error_args );
350 - return;
334 + wp_die( esc_html__( 'Invalid route', 'formidable' ), esc_html__( 'Invalid route', 'formidable' ), 400 );
351 335 }
352 336
353 337 $frm_style = new FrmStyle( $style_id );
354 338 $active_style = $frm_style->get_one();
@@ -358,9 +342,11 @@
358 342
359 343 /**
360 344 * @since 6.0
361 345 *
362 - * @param array{form:\stdClass} $data
346 + * @param array {
347 + * @type stdClass $form
348 + * }
363 349 */
364 350 do_action( 'frm_before_render_style_page', compact( 'form' ) );
365 351
366 352 self::render_style_page( $active_style, $form, $default_style );
@@ -413,9 +399,9 @@
413 399
414 400 if ( ! $form_id ) {
415 401 // TODO: Show a message why a random form is being shown (because no form is assigned to the style).
416 402 // Fallback to any form.
417 - $where = array(
403 + $where = array(
418 404 'status' => 'published',
419 405 // Make sure it's not a repeater.
420 406 'parent_form_id' => array( null, 0 ),
421 407 );
@@ -432,9 +418,9 @@
432 418 */
433 419 private static function disable_admin_page_styling_on_submit_buttons() {
434 420 add_filter(
435 421 'frm_submit_button_class',
436 - function ( $classes ) {
422 + function( $classes ) {
437 423 $classes[] = 'frm_no_style_button';
438 424 return $classes;
439 425 }
440 426 );
@@ -478,15 +464,15 @@
478 464 * @param int $style_id
479 465 */
480 466 $style_id = apply_filters( 'frm_saved_form_style_id', $style_id );
481 467
482 - if ( ! $style_id && '0' !== FrmAppHelper::get_post_param( 'style_id', '', 'sanitize_text_field' ) ) {
468 + if ( ! $style_id && '0' !== FrmAppHelper::get_post_param( 'style_id', 'sanitize_text_field', '' ) ) {
483 469 // "0" is a special value used for the enable/disable toggle.
484 470 wp_die( esc_html__( 'Invalid style value', 'formidable' ), esc_html__( 'Invalid style value', 'formidable' ), 400 );
485 471 return;
486 472 }
487 473
488 - $form_id = FrmAppHelper::get_post_param( 'form_id', 0, 'absint' );
474 + $form_id = FrmAppHelper::get_post_param( 'form_id', 'absint', 0 );
489 475 if ( ! $form_id ) {
490 476 wp_die( esc_html__( 'No form specified', 'formidable' ), esc_html__( 'No form specified', 'formidable' ), 400 );
491 477 return;
492 478 }
@@ -539,9 +525,9 @@
539 525 $plugin_url = FrmAppHelper::plugin_url();
540 526 $version = FrmAppHelper::plugin_version();
541 527 $js_dependencies = array( 'wp-i18n', 'wp-hooks', 'formidable_dom' );
542 528
543 - if ( FrmAppHelper::pro_is_installed() && is_callable( 'FrmProAppHelper::use_jquery_datepicker' ) && FrmProAppHelper::use_jquery_datepicker() ) {
529 + if ( FrmAppHelper::pro_is_installed() ) {
544 530 $js_dependencies[] = 'jquery-ui-datepicker';
545 531 }
546 532
547 533 wp_register_script( 'formidable_style', $plugin_url . '/js/admin/style.js', $js_dependencies, $version );
@@ -549,9 +535,8 @@
549 535 wp_print_styles( 'formidable_style' );
550 536
551 537 wp_print_styles( 'formidable' );
552 538 wp_enqueue_script( 'formidable_style' );
553 - wp_set_script_translations( 'formidable_style', 'formidable' );
554 539 }
555 540
556 541 /**
557 542 * Render the style page (with a more limited and typed scope than calling it from self::style directly).
@@ -635,21 +620,21 @@
635 620 * Filter form classes so the form uses the preview style, not the form's active style.
636 621 *
637 622 * @since 6.0
638 623 *
639 - * @param stdClass|WP_Post $style A new style is not a WP_Post object.
624 + * @param WP_Post|stdClass $style A new style is not a WP_Post object.
640 625 * @return void
641 626 */
642 627 private static function force_form_style( $style ) {
643 628 add_filter(
644 629 'frm_add_form_style_class',
645 - function ( $class ) use ( $style ) {
646 - $split = array_filter(
630 + function( $class ) use ( $style ) {
631 + $split = array_filter(
647 632 explode( ' ', $class ),
648 633 /**
649 634 * @param string $class
650 635 */
651 - function ( $class ) {
636 + function( $class ) {
652 637 return $class && 0 !== strpos( $class, 'frm_style_' );
653 638 }
654 639 );
655 640 $split[] = 'frm_style_' . $style->post_name;
@@ -666,8 +651,9 @@
666 651 * @return void
667 652 */
668 653 public static function save_style() {
669 654 $frm_style = new FrmStyle();
655 + $message = '';
670 656 $post_id = FrmAppHelper::get_post_param( 'ID', false, 'sanitize_title' );
671 657 $style_nonce = FrmAppHelper::get_post_param( 'frm_style', '', 'sanitize_text_field' );
672 658
673 659 if ( $post_id === false || ! wp_verify_nonce( $style_nonce, 'frm_style_nonce' ) ) {
@@ -724,9 +710,9 @@
724 710 return;
725 711 }
726 712
727 713 parse_str( $query, $parsed_query );
728 - $form_id = ! empty( $parsed_query['form'] ) ? absint( $parsed_query['form'] ) : 0;
714 + $form_id = ! empty( $parsed_query['form'] ) ? absint( $parsed_query['form'] ) : 0;
729 715
730 716 $style = new stdClass();
731 717 $style->ID = end( $ids );
732 718 wp_safe_redirect( esc_url_raw( FrmStylesHelper::get_edit_url( $style, $form_id ) ) );
@@ -743,9 +729,8 @@
743 729 public static function manage( $message = '', $forms = array() ) {
744 730 $frm_style = new FrmStyle();
745 731 $styles = $frm_style->get_all();
746 732 $default_style = $frm_style->get_default_style( $styles );
747 - $frm_settings = FrmAppHelper::get_settings();
748 733
749 734 if ( ! $forms ) {
750 735 $forms = FrmForm::get_published_forms();
751 736 }
@@ -763,14 +748,14 @@
763 748 global $wpdb;
764 749
765 750 $forms = FrmForm::get_published_forms();
766 751 foreach ( $forms as $form ) {
767 - if ( ! isset( $_POST['style'] ) || ! isset( $_POST['style'][ $form->id ] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing
752 + $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
753 + $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
754 + if ( $new_style == $previous_style ) {
768 755 continue;
769 756 }
770 757
771 - $new_style = sanitize_text_field( wp_unslash( $_POST['style'][ $form->id ] ) ); // phpcs:ignore WordPress.Security.NonceVerification.Missing
772 -
773 758 $form->options['custom_style'] = $new_style;
774 759 $wpdb->update( $wpdb->prefix . 'frm_forms', array( 'options' => maybe_serialize( $form->options ) ), array( 'id' => $form->id ) );
775 760 unset( $form );
776 761 }
@@ -904,26 +889,23 @@
904 889 echo json_encode( $defaults );
905 890 wp_die();
906 891 }
907 892
908 - $frm_style = new FrmStyle();
909 - $default_template_style = $frm_style->get_default_template_style( $style_id );
910 - $where = array(
893 + $frm_style = new FrmStyle();
894 + $defaults = $frm_style->get_defaults();
895 + $default_post_content = FrmAppHelper::prepare_and_encode( $defaults );
896 + $where = array(
911 897 'ID' => $style_id,
912 898 'post_type' => self::$post_type,
913 899 );
914 -
915 - $style_object = $frm_style->get_new();
916 - $style_object->post_content = json_decode( $default_template_style, true );
917 -
918 900 global $wpdb;
919 - $wpdb->update( $wpdb->posts, array( 'post_content' => $default_template_style ), $where );
901 + $wpdb->update( $wpdb->posts, array( 'post_content' => $default_post_content ), $where );
920 902
921 903 // Save the settings after resetting to default or the old style will still appear.
922 904 $frm_style->save_settings();
923 905
924 906 $data = array(
925 - 'style' => FrmStylesCardHelper::get_style_param_for_card( $style_object ),
907 + 'style' => FrmStylesCardHelper::get_style_param_for_card( $frm_style->get_new() ),
926 908 );
927 909 wp_send_json_success( $data );
928 910 wp_die();
929 911 }
@@ -938,10 +920,9 @@
938 920 public static function change_styling() {
939 921 FrmAppHelper::permission_check( 'frm_change_settings' );
940 922 check_ajax_referer( 'frm_ajax', 'nonce' );
941 923
942 - $is_loaded_via_ajax = true;
943 - $frm_style = new FrmStyle();
924 + $frm_style = new FrmStyle();
944 925
945 926 // Intentionally avoid defaults here so nothing gets removed from our style.
946 927 $defaults = array();
947 928 $style = '';
@@ -1051,9 +1032,9 @@
1051 1032 }
1052 1033
1053 1034 /**
1054 1035 * Add an extra style rule to hide a broken style warning.
1055 - * To avoid cluttering the front end with any unnecessary styles this is only added when the referer URL matches the styler.
1036 + * To avoid cluttering the front end with any unecessary styles this is only added when the referer URL matches the styler.
1056 1037 *
1057 1038 * @since 6.2.3
1058 1039 *
1059 1040 * @return void
@@ -1104,9 +1085,9 @@
1104 1085 return;
1105 1086 }
1106 1087
1107 1088 $frm_settings = FrmAppHelper::get_settings();
1108 - if ( $frm_settings->load_style !== 'none' ) {
1089 + if ( $frm_settings->load_style != 'none' ) {
1109 1090 wp_enqueue_style( 'formidable' );
1110 1091 $frm_vars['css_loaded'] = true;
1111 1092 }
1112 1093 }
@@ -1125,9 +1106,9 @@
1125 1106
1126 1107 /**
1127 1108 * Get the style post object for a target form.
1128 1109 *
1129 - * @param bool|object|string $form
1110 + * @param object|string|boolean $form
1130 1111 * @return WP_Post|null
1131 1112 */
1132 1113 public static function get_form_style( $form = 'default' ) {
1133 1114 $style = FrmFormsHelper::get_form_style( $form );
@@ -1160,11 +1141,12 @@
1160 1141 return $class;
1161 1142 }
1162 1143
1163 1144 /**
1164 - * @since 3.0
1165 1145 * @param object $style
1166 1146 * @param string $class
1147 + *
1148 + * @since 3.0
1167 1149 */
1168 1150 private static function maybe_add_rtl_class( $style, &$class ) {
1169 1151 $is_rtl = isset( $style->post_content['direction'] ) && 'rtl' === $style->post_content['direction'];
1170 1152 if ( $is_rtl ) {
@@ -1209,86 +1191,10 @@
1209 1191
1210 1192 return $important;
1211 1193 }
1212 1194
1213 - /**
1214 - * Duplicate of WordPress do_accordion_section function, it adds an additional svg icon support.
1215 - *
1216 - * @since 6.8.3
1217 - *
1218 - * @return int
1219 - */
1220 - public static function do_accordion_sections( $screen, $context, $data_object ) {
1221 - global $wp_meta_boxes;
1222 -
1223 - // the symbol id from icons.svg
1224 - $icon_ids = array(
1225 - 'ranking-fields-style' => 'frm_chart_bar_icon',
1226 - 'section-fields-style' => 'frm-form-title-style',
1227 - );
1228 -
1229 - wp_enqueue_script( 'accordion' );
1230 -
1231 - if ( empty( $screen ) ) {
1232 - $screen = get_current_screen();
1233 - } elseif ( is_string( $screen ) ) {
1234 - $screen = convert_to_screen( $screen );
1235 - }
1236 -
1237 - $page = $screen->id;
1238 -
1239 - ?>
1240 - <div id="side-sortables" class="accordion-container">
1241 - <ul class="outer-border">
1242 - <?php
1243 - $i = 0;
1244 - $first_open = false;
1245 -
1246 - if ( isset( $wp_meta_boxes[ $page ][ $context ] ) ) {
1247 - foreach ( array( 'high', 'core', 'default', 'low' ) as $priority ) {
1248 - if ( isset( $wp_meta_boxes[ $page ][ $context ][ $priority ] ) ) {
1249 - foreach ( $wp_meta_boxes[ $page ][ $context ][ $priority ] as $box ) {
1250 - if ( false === $box || ! $box['title'] ) {
1251 - continue;
1252 - }
1253 -
1254 - ++$i;
1255 - $icon_id = array_key_exists( $box['id'], $icon_ids ) ? $icon_ids[ $box['id'] ] : 'frm-' . $box['id'];
1256 -
1257 - $open_class = '';
1258 - if ( ! $first_open ) {
1259 - $first_open = true;
1260 - $open_class = 'open';
1261 - }
1262 -
1263 - $accordion_content_id = 'frm_style_section_' . $box['id'];
1264 - ?>
1265 - <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'] ); ?>">
1266 - <h3 class="accordion-section-title hndle">
1267 - <?php
1268 - FrmAppHelper::icon_by_class( 'frmfont ' . $icon_id . ' frm_svg24' );
1269 - echo esc_html( $box['title'] );
1270 - ?>
1271 - <button type="button" aria-expanded="<?php echo esc_attr( 'open' === $open_class ? 'true' : 'false' ); ?>" aria-controls="<?php echo esc_attr( $accordion_content_id ); ?>" aria-label="<?php echo esc_attr( $box['title'] ); ?>">
1272 - <?php FrmAppHelper::icon_by_class( 'frmfont frm_arrowdown8_icon' ); ?>
1273 - </button>
1274 - </h3>
1275 - <div class="accordion-section-content <?php postbox_classes( $box['id'], $page ); ?>" id="<?php echo esc_attr( $accordion_content_id ); ?>">
1276 - <div class="inside">
1277 - <?php call_user_func( $box['callback'], $data_object, $box ); ?>
1278 - </div><!-- .inside -->
1279 - </div><!-- .accordion-section-content -->
1280 - </li><!-- .accordion-section -->
1281 - <?php
1282 - }//end foreach
1283 - }//end if
1284 - }//end foreach
1285 - }//end if
1286 - ?>
1287 - </ul><!-- .outer-border -->
1288 - </div><!-- .accordion-container -->
1289 - <?php
1290 - return $i;
1195 + public static function do_accordion_sections( $screen, $context, $object ) {
1196 + return do_accordion_sections( $screen, $context, $object );
1291 1197 }
1292 1198
1293 1199 /**
1294 1200 * Rename a style via an AJAX action.