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/controllers/FrmStylesController.php +131 -453 6.326.7 View file →
@@ -5,34 +5,22 @@
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 - /**
24 - * Cache of the active style object keyed by form ID.
25 - *
26 - * @since 6.32
27 - *
28 - * @var array
29 - */
30 - private static $active_style = array();
31 -
32 - /**
33 - * @return void
34 - */
35 23 public static function load_pro_hooks() {
36 24 if ( FrmAppHelper::pro_is_installed() ) {
37 25 FrmProStylesController::load_pro_hooks();
38 26 }
@@ -37,11 +25,8 @@
37 25 FrmProStylesController::load_pro_hooks();
38 26 }
39 27 }
40 28
41 - /**
42 - * @return void
43 - */
44 29 public static function register_post_types() {
45 30 register_post_type(
46 31 self::$post_type,
47 32 array(
@@ -82,10 +67,10 @@
82 67 *
83 68 * @return void
84 69 */
85 70 public static function menu() {
86 - add_submenu_page( 'formidable', 'Formidable | ' . __( 'Styles', 'formidable' ), __( 'Styles', 'formidable' ), 'frm_change_settings', 'formidable-styles', 'FrmStylesController::route' ); // phpcs:ignore SlevomatCodingStandard.Files.LineLength.LineTooLong
87 - add_submenu_page( 'themes.php', 'Formidable | ' . __( 'Styles', 'formidable' ), __( 'Forms', 'formidable' ), 'frm_change_settings', 'formidable-styles2', 'FrmStylesController::route' ); // phpcs:ignore SlevomatCodingStandard.Files.LineLength.LineTooLong
71 + add_submenu_page( 'formidable', 'Formidable | ' . __( 'Styles', 'formidable' ), __( 'Styles', 'formidable' ), 'frm_change_settings', 'formidable-styles', 'FrmStylesController::route' );
72 + add_submenu_page( 'themes.php', 'Formidable | ' . __( 'Styles', 'formidable' ), __( 'Forms', 'formidable' ), 'frm_change_settings', 'formidable-styles2', 'FrmStylesController::route' );
88 73 }
89 74
90 75 /**
91 76 * Remove filters for the visual styler preview.
@@ -110,9 +95,9 @@
110 95 *
111 96 * @return void
112 97 */
113 98 private static function disable_form_css() {
114 - add_filter( 'get_frm_stylesheet', '__return_empty_array' );
99 + add_filter( 'get_frm_stylesheet', '__return_false' );
115 100 }
116 101
117 102 /**
118 103 * Removing this action prevents front end JavaScript from loading.
@@ -134,23 +119,22 @@
134 119 if ( ! FrmAppHelper::is_style_editor_page() ) {
135 120 return;
136 121 }
137 122
138 - FrmStyleComponent::register_assets();
139 123 self::load_pro_hooks();
140 124
141 125 $version = FrmAppHelper::plugin_version();
126 + wp_enqueue_script( 'jquery-ui-datepicker' );
142 127
143 128 if ( FrmAppHelper::is_style_editor_page( 'edit' ) ) {
144 129 wp_enqueue_style( 'wp-color-picker' );
145 130 }
146 131
147 - wp_enqueue_style( 'frm-custom-theme', admin_url( 'admin-ajax.php?action=frmpro_css&frm_scope_custom_css=1' ), array(), $version );
132 + wp_enqueue_style( 'frm-custom-theme', admin_url( 'admin-ajax.php?action=frmpro_css' ), array(), $version );
148 133
149 134 $style = apply_filters( 'frm_style_head', false );
150 -
151 135 if ( $style ) {
152 - wp_enqueue_style( 'frm-single-custom-theme', admin_url( 'admin-ajax.php?action=frmpro_load_css&flat=1' ) . '&' . http_build_query( $style->post_content ), array(), $version ); // phpcs:ignore SlevomatCodingStandard.Files.LineLength.LineTooLong
136 + wp_enqueue_style( 'frm-single-custom-theme', admin_url( 'admin-ajax.php?action=frmpro_load_css&flat=1' ) . '&' . http_build_query( $style->post_content ), array(), $version );
153 137 }
154 138 }
155 139
156 140 /**
@@ -168,9 +152,9 @@
168 152 'frm_update_settings',
169 153 /**
170 154 * Update the form data on the "Manage Styles" tab after global settings are saved.
171 155 */
172 - function () {
156 + function() {
173 157 self::manage_styles();
174 158 }
175 159 );
176 160 }
@@ -177,9 +161,8 @@
177 161
178 162 /**
179 163 * @param string $register Either 'enqueue' or 'register'.
180 164 * @param bool $force True to enqueue/register the style if a form has not been loaded.
181 - *
182 165 * @return void
183 166 */
184 167 public static function enqueue_css( $register = 'enqueue', $force = false ) {
185 168 global $frm_vars;
@@ -191,9 +174,8 @@
191 174 return;
192 175 }
193 176
194 177 $frm_settings = FrmAppHelper::get_settings();
195 -
196 178 if ( $frm_settings->load_style === 'none' ) {
197 179 return;
198 180 }
199 181
@@ -209,10 +191,9 @@
209 191 wp_register_style( $css_key, $file, array(), $this_version );
210 192 }
211 193
212 194 $load_on_all = ! FrmAppHelper::is_admin() && 'all' === $frm_settings->load_style;
213 -
214 - if ( $load_on_all || $register !== 'register' ) {
195 + if ( $load_on_all || $register != 'register' ) {
215 196 wp_enqueue_style( $css_key );
216 197 }
217 198 unset( $css_key, $file );
218 199 }
@@ -219,9 +200,9 @@
219 200
220 201 if ( $frm_settings->load_style === 'all' ) {
221 202 $frm_vars['css_loaded'] = true;
222 203 }
223 - }//end if
204 + }
224 205 unset( $css );
225 206
226 207 add_filter( 'style_loader_tag', 'FrmStylesController::add_tags_to_css', 10, 2 );
227 208 }
@@ -242,22 +223,18 @@
242 223 }
243 224
244 225 /**
245 226 * @param array $stylesheet_urls
246 - *
247 227 * @return void
248 228 */
249 229 private static function get_url_to_custom_style( &$stylesheet_urls ) {
250 - $add_css_to_uploads_dir = FrmStyle::add_css_to_uploads_dir();
251 - $file_path = FrmStyle::get_generated_css_file_path( $add_css_to_uploads_dir ) . '/' . self::get_file_name();
252 -
253 - if ( ! is_readable( $file_path ) ) {
254 - $stylesheet_urls['formidable'] = admin_url( 'admin-ajax.php?action=frmpro_css' );
255 - return;
230 + $file_name = '/css/' . self::get_file_name();
231 + if ( is_readable( FrmAppHelper::plugin_path() . $file_name ) ) {
232 + $url = FrmAppHelper::plugin_url() . $file_name;
233 + } else {
234 + $url = admin_url( 'admin-ajax.php?action=frmpro_css' );
256 235 }
257 -
258 - $base_url = $add_css_to_uploads_dir ? wp_upload_dir()['baseurl'] . '/formidable/css/' : FrmAppHelper::plugin_url() . '/css/';
259 - $stylesheet_urls['formidable'] = $base_url . self::get_file_name();
236 + $stylesheet_urls['formidable'] = $url;
260 237 }
261 238
262 239 /**
263 240 * Use a different stylesheet per site in a multisite install
@@ -262,44 +239,39 @@
262 239 /**
263 240 * Use a different stylesheet per site in a multisite install
264 241 *
265 242 * @since 3.0.03
266 - *
267 - * @return string
268 243 */
269 244 public static function get_file_name() {
270 245 if ( is_multisite() ) {
271 - return 'formidableforms' . absint( get_current_blog_id() ) . '.css';
246 + $blog_id = get_current_blog_id();
247 + $name = 'formidableforms' . absint( $blog_id ) . '.css';
248 + } else {
249 + $name = 'formidableforms.css';
272 250 }
273 251
274 - return 'formidableforms.css';
252 + return $name;
275 253 }
276 254
277 - /**
278 - * @param string $css_key
279 - * @param string $version
280 - *
281 - * @return string
282 - */
283 255 private static function get_css_version( $css_key, $version ) {
284 - if ( 'formidable' !== $css_key ) {
285 - return $version;
256 + if ( 'formidable' == $css_key ) {
257 + $this_version = get_option( 'frm_last_style_update' );
258 + if ( ! $this_version ) {
259 + $this_version = $version;
260 + }
261 + } else {
262 + $this_version = $version;
286 263 }
287 264
288 - $this_version = get_option( 'frm_last_style_update' );
289 -
290 - return $this_version ? $this_version : $version;
265 + return $this_version;
291 266 }
292 267
293 - /**
294 - * @param string $tag
295 - * @param string $handle
296 - *
297 - * @return string
298 - */
299 268 public static function add_tags_to_css( $tag, $handle ) {
300 - if ( ( 'formidable' === $handle || 'jquery-theme' === $handle ) && ! str_contains( $tag, ' property=' ) ) {
301 - return str_replace( ' type="', ' property="stylesheet" type="', $tag );
269 + if ( ( 'formidable' == $handle || 'jquery-theme' == $handle ) && strpos( $tag, ' property=' ) === false ) {
270 + $frm_settings = FrmAppHelper::get_settings();
271 + if ( $frm_settings->use_html ) {
272 + $tag = str_replace( ' type="', ' property="stylesheet" type="', $tag );
273 + }
302 274 }
303 275
304 276 return $tag;
305 277 }
@@ -347,39 +319,25 @@
347 319
348 320 self::setup_styles_and_scripts_for_styler();
349 321
350 322 $style_id = self::get_style_id_for_styler();
351 -
352 323 if ( ! $style_id ) {
353 - $error_args = array(
354 - 'title' => __( 'No styles', 'formidable' ),
355 - 'body' => __( 'You must have a style to use the Visual Styler.', 'formidable' ),
356 - 'cancel_url' => admin_url( 'admin.php?page=formidable' ),
357 - );
358 - FrmAppController::show_error_modal( $error_args );
359 - return;
324 + wp_die( esc_html__( 'Invalid route', 'formidable' ), esc_html__( 'Invalid route', 'formidable' ), 400 );
360 325 }
361 326
362 327 $form_id = FrmAppHelper::simple_get( 'form', 'absint', 0 );
363 -
364 328 if ( ! $form_id ) {
365 329 $form_id = self::get_form_id_for_style( $style_id );
366 330 }
367 331
368 332 $form = FrmForm::getOne( $form_id );
369 -
370 333 if ( ! is_object( $form ) ) {
371 - $error_args = array(
372 - 'title' => __( 'No forms', 'formidable' ),
373 - 'body' => __( 'You must have a form to use the Visual Styler.', 'formidable' ),
374 - 'cancel_url' => admin_url( 'admin.php?page=formidable' ),
375 - );
376 - FrmAppController::show_error_modal( $error_args );
377 - return;
334 + wp_die( esc_html__( 'Invalid route', 'formidable' ), esc_html__( 'Invalid route', 'formidable' ), 400 );
378 335 }
379 336
380 - $frm_style = new FrmStyle( $style_id );
381 - $active_style = $frm_style->get_one();
337 + $frm_style = new FrmStyle( $style_id );
338 + $active_style = $frm_style->get_one();
339 + $default_style = self::get_default_style();
382 340
383 341 self::disable_admin_page_styling_on_submit_buttons();
384 342
385 343 /**
@@ -384,13 +342,15 @@
384 342
385 343 /**
386 344 * @since 6.0
387 345 *
388 - * @param array{form:\stdClass} $data
346 + * @param array {
347 + * @type stdClass $form
348 + * }
389 349 */
390 350 do_action( 'frm_before_render_style_page', compact( 'form' ) );
391 351
392 - self::render_style_page( $active_style, $form, self::get_default_style() );
352 + self::render_style_page( $active_style, $form, $default_style );
393 353 }
394 354
395 355 /**
396 356 * @since 6.0
@@ -398,9 +358,8 @@
398 358 * @return int
399 359 */
400 360 private static function get_style_id_for_styler() {
401 361 $action = FrmAppHelper::simple_get( 'frm_action' );
402 -
403 362 if ( 'duplicate' === $action ) {
404 363 // The duplicate action uses style_id instead of id for better backward compatibility.
405 364 return FrmAppHelper::simple_get( 'style_id', 'absint', 0 );
406 365 }
@@ -405,9 +364,8 @@
405 364 return FrmAppHelper::simple_get( 'style_id', 'absint', 0 );
406 365 }
407 366
408 367 $style_id = FrmAppHelper::simple_get( 'id', 'absint', 0 );
409 -
410 368 if ( $style_id ) {
411 369 // Always use the style ID from the URL if one is specified.
412 370 return $style_id;
413 371 }
@@ -412,9 +370,8 @@
412 370 return $style_id;
413 371 }
414 372
415 373 $request_form_id = FrmAppHelper::simple_get( 'form', 'absint', 0 );
416 -
417 374 if ( $request_form_id && is_callable( 'FrmProStylesController::get_active_style_for_form' ) ) {
418 375 return FrmProStylesController::get_active_style_for_form( $request_form_id )->ID;
419 376 }
420 377
@@ -426,9 +383,8 @@
426 383 *
427 384 * @since 6.0
428 385 *
429 386 * @param int $style_id
430 - *
431 387 * @return int
432 388 */
433 389 private static function get_form_id_for_style( $style_id ) {
434 390 $check = serialize( array( 'custom_style' => (string) $style_id ) );
@@ -441,13 +397,13 @@
441 397 )
442 398 );
443 399
444 400 if ( ! $form_id ) {
401 + // TODO: Show a message why a random form is being shown (because no form is assigned to the style).
445 402 // Fallback to any form.
446 - $where = array(
403 + $where = array(
447 404 'status' => 'published',
448 - // Make sure it's not a repeater.
449 - 'parent_form_id' => array( null, 0 ),
405 + 'parent_form_id' => array( null, 0 ), // Make sure it's not a repeater.
450 406 );
451 407 $form_id = FrmDb::get_var( 'frm_forms', $where, 'id' );
452 408 }
453 409
@@ -461,9 +417,9 @@
461 417 */
462 418 private static function disable_admin_page_styling_on_submit_buttons() {
463 419 add_filter(
464 420 'frm_submit_button_class',
465 - function ( $classes ) {
421 + function( $classes ) {
466 422 $classes[] = 'frm_no_style_button';
467 423 return $classes;
468 424 }
469 425 );
@@ -474,10 +430,11 @@
474 430 *
475 431 * @return WP_Post
476 432 */
477 433 private static function get_default_style() {
478 - $frm_style = new FrmStyle( 'default' );
479 - return $frm_style->get_one();
434 + $frm_style = new FrmStyle( 'default' );
435 + $default_style = $frm_style->get_one();
436 + return $default_style;
480 437 }
481 438
482 439 /**
483 440 * Save style for form (from Styler list page) via a POST action.
@@ -487,15 +444,13 @@
487 444 * @return void
488 445 */
489 446 private static function save_form_style() {
490 447 $permission_error = FrmAppHelper::permission_nonce_error( 'frm_edit_forms', 'frm_save_form_style', 'frm_save_form_style_nonce' );
491 -
492 448 if ( $permission_error !== false ) {
493 449 wp_die( 'Unable to save form', '', 403 );
494 450 }
495 451
496 452 $style_id = FrmAppHelper::get_post_param( 'style_id', 0, 'absint' );
497 -
498 453 if ( $style_id && ! self::confirm_style_exists_before_setting( $style_id ) ) {
499 454 wp_die( esc_html__( 'Invalid target style', 'formidable' ), esc_html__( 'Invalid target style', 'formidable' ), 400 );
500 455 return;
501 456 }
@@ -508,16 +463,15 @@
508 463 * @param int $style_id
509 464 */
510 465 $style_id = apply_filters( 'frm_saved_form_style_id', $style_id );
511 466
512 - if ( ! $style_id && '0' !== FrmAppHelper::get_post_param( 'style_id', '', 'sanitize_text_field' ) ) {
467 + if ( ! $style_id && '0' !== FrmAppHelper::get_post_param( 'style_id', 'sanitize_text_field', '' ) ) {
513 468 // "0" is a special value used for the enable/disable toggle.
514 469 wp_die( esc_html__( 'Invalid style value', 'formidable' ), esc_html__( 'Invalid style value', 'formidable' ), 400 );
515 470 return;
516 471 }
517 472
518 - $form_id = FrmAppHelper::get_post_param( 'form_id', 0, 'absint' );
519 -
473 + $form_id = FrmAppHelper::get_post_param( 'form_id', 'absint', 0 );
520 474 if ( ! $form_id ) {
521 475 wp_die( esc_html__( 'No form specified', 'formidable' ), esc_html__( 'No form specified', 'formidable' ), 400 );
522 476 return;
523 477 }
@@ -522,46 +476,28 @@
522 476 return;
523 477 }
524 478
525 479 $form = FrmForm::getOne( $form_id );
526 -
527 480 if ( ! $form ) {
528 481 wp_die( esc_html__( 'Form does not exist', 'formidable' ), esc_html__( 'Form does not exist', 'formidable' ), 400 );
529 482 return;
530 483 }
531 484
532 - $previous_style_id = $form->options['custom_style'];
533 -
534 485 // If the default style is selected, use the "Always use default" legacy option instead of the default style.
535 486 // There's also a check here for conversational forms.
536 487 // Without the check it isn't possible to select "Default" because "Always use default" will convert to "Lines" dynamically.
537 -
538 - if ( $style_id === self::get_default_style()->ID && empty( $form->options['chat'] ) ) {
488 + $default_style = self::get_default_style();
489 + if ( $style_id === $default_style->ID && empty( $form->options['chat'] ) ) {
539 490 $style_id = 1;
540 491 }
541 492
542 - // We want to save a string for consistency. FrmStylesHelper::get_form_count_for_style expects the custom style ID is a string.
543 - $form->options['custom_style'] = (string) $style_id;
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.
544 494
545 - if ( $previous_style_id === $form->options['custom_style'] ) {
546 - // Exit early before updating DB if nothing actually changed.
547 - self::$message = __( 'Successfully updated style.', 'formidable' );
548 - return;
549 - }
550 -
551 495 global $wpdb;
552 496 $wpdb->update( $wpdb->prefix . 'frm_forms', array( 'options' => maybe_serialize( $form->options ) ), array( 'id' => $form->id ) );
553 497
554 498 FrmForm::clear_form_cache();
555 499
556 - /**
557 - * @since 6.25.1
558 - *
559 - * @param int $form_id
560 - * @param int $style_id
561 - */
562 - do_action( 'frm_after_changed_form_style', absint( $form_id ), absint( $style_id ) );
563 -
564 500 self::$message = __( 'Successfully updated style.', 'formidable' );
565 501 }
566 502
567 503 /**
@@ -567,9 +503,8 @@
567 503 /**
568 504 * Validate that we're assigning a form to a style that actually exists before assigning it to a form.
569 505 *
570 506 * @param int $style_id
571 - *
572 507 * @return bool True if the style actually exists.
573 508 */
574 509 private static function confirm_style_exists_before_setting( $style_id ) {
575 510 global $wpdb;
@@ -588,9 +523,9 @@
588 523 $plugin_url = FrmAppHelper::plugin_url();
589 524 $version = FrmAppHelper::plugin_version();
590 525 $js_dependencies = array( 'wp-i18n', 'wp-hooks', 'formidable_dom' );
591 526
592 - if ( FrmAppHelper::pro_is_installed() && is_callable( 'FrmProAppHelper::use_jquery_datepicker' ) && FrmProAppHelper::use_jquery_datepicker() ) {
527 + if ( FrmAppHelper::pro_is_installed() ) {
593 528 $js_dependencies[] = 'jquery-ui-datepicker';
594 529 }
595 530
596 531 wp_register_script( 'formidable_style', $plugin_url . '/js/admin/style.js', $js_dependencies, $version );
@@ -598,9 +533,8 @@
598 533 wp_print_styles( 'formidable_style' );
599 534
600 535 wp_print_styles( 'formidable' );
601 536 wp_enqueue_script( 'formidable_style' );
602 - wp_set_script_translations( 'formidable_style', 'formidable' );
603 537 }
604 538
605 539 /**
606 540 * Render the style page (with a more limited and typed scope than calling it from self::style directly).
@@ -607,22 +541,20 @@
607 541 *
608 542 * @since 6.0
609 543 *
610 544 * @param stdClass|WP_Post $active_style
545 + * @param array<WP_Post> $styles
611 546 * @param stdClass $form
612 547 * @param WP_Post $default_style
613 - *
614 548 * @return void
615 549 */
616 550 private static function render_style_page( $active_style, $form, $default_style ) {
617 551 $style_views_path = self::get_views_path();
618 - // Edit, list (default), new_style.
619 - $view = FrmAppHelper::simple_get( 'frm_action', 'sanitize_text_field', 'list' );
620 - $frm_style = new FrmStyle( $active_style->ID );
552 + $view = FrmAppHelper::simple_get( 'frm_action', 'sanitize_text_field', 'list' ); // edit, list (default), new_style.
553 + $frm_style = new FrmStyle( $active_style->ID );
621 554
622 555 if ( 'new_style' !== $view && ! FrmAppHelper::simple_get( 'form' ) && ! FrmAppHelper::simple_get( 'style_id' ) ) {
623 - // Have the Appearance > Forms link fallback to the edit view. Otherwise we want to use 'list' as the default.
624 - $view = 'edit';
556 + $view = 'edit'; // Have the Appearance > Forms link fallback to the edit view. Otherwise we want to use 'list' as the default.
625 557 }
626 558
627 559 if ( in_array( $view, array( 'edit', 'new_style', 'duplicate' ), true ) ) {
628 560 self::add_meta_boxes();
@@ -633,44 +565,22 @@
633 565 $style = $active_style;
634 566 break;
635 567
636 568 case 'duplicate':
637 - $style = clone $active_style;
638 - $new_style = $frm_style->get_new();
639 - $new_name = self::get_new_style_post_name( $new_style->post_name );
640 -
641 - // The single style custom CSS is nested under the old style's scope. Re-scope it to the
642 - // new style's scope so it unnests correctly for display and re-nests correctly on save.
643 - if ( ! empty( $style->post_content['single_style_custom_css'] ) ) {
644 - $css_scope_helper = new FrmCssScopeHelper();
645 - $unnested_css = $css_scope_helper->unnest( $style->post_content['single_style_custom_css'], 'frm_style_' . $style->post_name ); // phpcs:ignore SlevomatCodingStandard.Files.LineLength.LineTooLong
646 - $style->post_content['single_style_custom_css'] = $css_scope_helper->nest( $unnested_css, 'frm_style_' . $new_name );
647 - }
648 -
569 + $style = clone $active_style;
570 + $new_style = $frm_style->get_new();
649 571 $style->ID = $new_style->ID;
650 - $style->post_name = $new_name;
651 - unset( $new_style, $new_name );
572 + $style->post_name = $new_style->post_name;
573 + unset( $new_style );
652 574 break;
653 575
654 576 case 'new_style':
655 - $style = $frm_style->get_new();
656 - $style->post_name = self::get_new_style_post_name( $style->post_name );
577 + $style = $frm_style->get_new();
657 578 break;
658 - }//end switch
579 + }
659 580
660 581 if ( in_array( $view, array( 'duplicate', 'new_style' ), true ) ) {
661 - // A new or duplicated style has no ID yet, so the Rename modal updates the post_title input
662 - // instead of calling an endpoint. Prefer that posted title over $_GET['style_name'] when present.
663 - $posted_title = '';
664 -
665 - // phpcs:ignore WordPress.Security.NonceVerification.Missing
666 - if ( isset( $_POST['frm_style_setting']['post_title'] ) ) {
667 - // The nonce is verified in FrmStylesController::save_style before this renders.
668 - // phpcs:ignore WordPress.Security.NonceVerification.Missing
669 - $posted_title = sanitize_text_field( wp_unslash( $_POST['frm_style_setting']['post_title'] ) );
670 - }
671 -
672 - $style->post_title = '' !== $posted_title ? $posted_title : FrmAppHelper::simple_get( 'style_name' );
582 + $style->post_title = FrmAppHelper::simple_get( 'style_name' );
673 583 $style->menu_order = 0;
674 584 }
675 585
676 586 if ( ! isset( $style ) ) {
@@ -694,27 +604,8 @@
694 604 include $style_views_path . 'show.php';
695 605 }
696 606
697 607 /**
698 - * Derive the temporary post_name (CSS scope slug) for a new or duplicated style from the chosen
699 - * style name so the displayed scope matches the slug WordPress will store on save.
700 - *
701 - * Falls back to the auto-generated key when no style name was provided so the scope is never empty.
702 - *
703 - * @since 6.32
704 - *
705 - * @param string $fallback The auto-generated post_name to use when no style name is chosen.
706 - *
707 - * @return string
708 - */
709 - private static function get_new_style_post_name( $fallback ) {
710 - $style_name = FrmAppHelper::simple_get( 'style_name' );
711 - $slug = $style_name ? sanitize_title( $style_name ) : '';
712 -
713 - return $slug ? $slug : $fallback;
714 - }
715 -
716 - /**
717 608 * @since 6.0
718 609 *
719 610 * @return string
720 611 */
@@ -726,23 +617,22 @@
726 617 * Filter form classes so the form uses the preview style, not the form's active style.
727 618 *
728 619 * @since 6.0
729 620 *
730 - * @param stdClass|WP_Post $style A new style is not a WP_Post object.
731 - *
621 + * @param WP_Post|stdClass $style A new style is not a WP_Post object.
732 622 * @return void
733 623 */
734 624 private static function force_form_style( $style ) {
735 625 add_filter(
736 626 'frm_add_form_style_class',
737 - function ( $class ) use ( $style ) {
738 - $split = array_filter(
627 + function( $class ) use ( $style ) {
628 + $split = array_filter(
739 629 explode( ' ', $class ),
740 630 /**
741 631 * @param string $class
742 632 */
743 - function ( $class ) {
744 - return $class && ! str_starts_with( $class, 'frm_style_' );
633 + function( $class ) {
634 + return $class && 0 !== strpos( $class, 'frm_style_' );
745 635 }
746 636 );
747 637 $split[] = 'frm_style_' . $style->post_name;
748 638 return implode( ' ', $split );
@@ -757,11 +647,10 @@
757 647 *
758 648 * @return void
759 649 */
760 650 public static function save_style() {
761 - FrmAppHelper::permission_check( 'frm_change_settings' );
762 -
763 651 $frm_style = new FrmStyle();
652 + $message = '';
764 653 $post_id = FrmAppHelper::get_post_param( 'ID', false, 'sanitize_title' );
765 654 $style_nonce = FrmAppHelper::get_post_param( 'frm_style', '', 'sanitize_text_field' );
766 655
767 656 if ( $post_id === false || ! wp_verify_nonce( $style_nonce, 'frm_style_nonce' ) ) {
@@ -770,22 +659,13 @@
770 659 return;
771 660 }
772 661
773 662 $id = $frm_style->update( $post_id );
774 -
775 663 if ( ! $post_id && $id ) {
776 664 self::maybe_redirect_after_save( $id );
777 - // Set the post id to the new style so it will be loaded for editing.
778 - $post_id = reset( $id );
665 + $post_id = reset( $id ); // Set the post id to the new style so it will be loaded for editing.
779 666 }
780 667
781 - /**
782 - * @since 6.25.1
783 - *
784 - * @param int $post_id
785 - */
786 - do_action( 'frm_after_saved_style', absint( $post_id ) );
787 -
788 668 self::$message = __( 'Your styling settings have been saved.', 'formidable' );
789 669 }
790 670
791 671 /**
@@ -804,20 +684,19 @@
804 684 *
805 685 * @since 6.0
806 686 *
807 687 * @param array $ids
808 - *
809 688 * @return void
810 689 */
811 690 private static function maybe_redirect_after_save( $ids ) {
812 - $referer = FrmAppHelper::get_server_value( 'HTTP_REFERER' );
813 - $parsed = parse_url( $referer );
814 - $query = $parsed['query'];
691 + $referer = FrmAppHelper::get_server_value( 'HTTP_REFERER' );
692 + $parsed = parse_url( $referer );
693 + $query = $parsed['query'];
694 +
815 695 $current_action = false;
816 696 $actions_to_redirect = array( 'duplicate', 'new_style' );
817 -
818 697 foreach ( $actions_to_redirect as $action ) {
819 - if ( str_contains( $query, 'frm_action=' . $action ) ) {
698 + if ( false !== strpos( $query, 'frm_action=' . $action ) ) {
820 699 $current_action = $action;
821 700 break;
822 701 }
823 702 }
@@ -827,9 +706,10 @@
827 706 return;
828 707 }
829 708
830 709 parse_str( $query, $parsed_query );
831 - $form_id = ! empty( $parsed_query['form'] ) ? absint( $parsed_query['form'] ) : 0;
710 + $form_id = ! empty( $parsed_query['form'] ) ? absint( $parsed_query['form'] ) : 0;
711 +
832 712 $style = new stdClass();
833 713 $style->ID = end( $ids );
834 714 wp_safe_redirect( esc_url_raw( FrmStylesHelper::get_edit_url( $style, $form_id ) ) );
835 715 die();
@@ -839,9 +719,8 @@
839 719 * @since 6.0
840 720 *
841 721 * @param string $message
842 722 * @param array|object $forms
843 - *
844 723 * @return void
845 724 */
846 725 public static function manage( $message = '', $forms = array() ) {
847 726 $frm_style = new FrmStyle();
@@ -846,9 +725,8 @@
846 725 public static function manage( $message = '', $forms = array() ) {
847 726 $frm_style = new FrmStyle();
848 727 $styles = $frm_style->get_all();
849 728 $default_style = $frm_style->get_default_style( $styles );
850 - $frm_settings = FrmAppHelper::get_settings();
851 729
852 730 if ( ! $forms ) {
853 731 $forms = FrmForm::get_published_forms();
854 732 }
@@ -865,16 +743,15 @@
865 743 private static function manage_styles() {
866 744 global $wpdb;
867 745
868 746 $forms = FrmForm::get_published_forms();
869 -
870 747 foreach ( $forms as $form ) {
871 - if ( ! isset( $_POST['style'] ) || ! isset( $_POST['style'][ $form->id ] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing
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
750 + if ( $new_style == $previous_style ) {
872 751 continue;
873 752 }
874 753
875 - $new_style = sanitize_text_field( wp_unslash( $_POST['style'][ $form->id ] ) ); // phpcs:ignore WordPress.Security.NonceVerification.Missing
876 -
877 754 $form->options['custom_style'] = $new_style;
878 755 $wpdb->update( $wpdb->prefix . 'frm_forms', array( 'options' => maybe_serialize( $form->options ) ), array( 'id' => $form->id ) );
879 756 unset( $form );
880 757 }
@@ -883,28 +760,15 @@
883 760 /**
884 761 * Echo content for the Custom CSS page.
885 762 *
886 763 * @param string $message
887 - * @param array $extra_args An array of extra arguments.
888 - *
889 764 * @return void
890 765 */
891 - public static function custom_css( $message = '', $extra_args = array() ) {
892 - $id = $extra_args['id'] ?? 'frm_codemirror_box';
893 - $settings = self::enqueue_codemirror( $id, $extra_args['placeholder'] ?? '' );
894 - $id = $settings ? $id : 'frm_custom_css_box';
895 - $show_errors = $extra_args['show_errors'] ?? true;
896 - $custom_css = $extra_args['custom_css'] ?? self::get_custom_css();
897 - $heading = $extra_args['heading'] ?? __( 'You can add custom css here or in your theme style.css. Any CSS added here will be used anywhere the Formidable CSS is loaded.', 'formidable' ); // phpcs:ignore SlevomatCodingStandard.Files.LineLength.LineTooLong
898 - $textarea_params = ! empty( $extra_args['textarea_params'] ) ? $extra_args['textarea_params'] : array(
899 - 'name' => 'frm_custom_css',
900 - 'id' => $id,
901 - );
766 + public static function custom_css( $message = '' ) {
767 + $settings = self::enqueue_codemirror();
768 + $id = $settings ? 'frm_codemirror_box' : 'frm_custom_css_box';
769 + $custom_css = self::get_custom_css();
902 770
903 - if ( $settings ) {
904 - $textarea_params['class'] = 'hide-if-js';
905 - }
906 -
907 771 include FrmAppHelper::plugin_path() . '/classes/views/styles/custom_css.php';
908 772 }
909 773
910 774 /**
@@ -911,33 +775,22 @@
911 775 * Get custom CSS code entered in the Custom CSS page.
912 776 *
913 777 * @since 6.0
914 778 *
915 - * @param array|null $single_style_settings The single style settings.
916 - *
917 779 * @return string
918 780 */
919 - public static function get_custom_css( $single_style_settings = null ) {
920 - if ( $single_style_settings ) {
921 - // If the single style settings are passed, return the custom CSS from the single style settings.
922 - if ( ! empty( $single_style_settings['single_style_custom_css'] ) && ! empty( $single_style_settings['enable_style_custom_css'] ) ) {
923 - return $single_style_settings['single_style_custom_css'];
924 - }
925 -
926 - return '';
927 - }
928 -
781 + public static function get_custom_css() {
929 782 $settings = FrmAppHelper::get_settings();
930 -
931 783 if ( is_string( $settings->custom_css ) ) {
932 784 return $settings->custom_css;
933 785 }
934 786
935 787 // If it does not exist, check the default style as a fallback.
936 - $frm_style = new FrmStyle();
937 - $style = $frm_style->get_default_style();
788 + $frm_style = new FrmStyle();
789 + $style = $frm_style->get_default_style();
790 + $custom_css = $style->post_content['custom_css'];
938 791
939 - return $style->post_content['custom_css'];
792 + return $custom_css;
940 793 }
941 794
942 795 /**
943 796 * Enqueue assets for codemirror, built into WordPress since 4.9.
@@ -944,14 +797,11 @@
944 797 * The Custom CSS page uses codemirror.
945 798 *
946 799 * @since 6.0 Previously this code was embedded in self::custom_css.
947 800 *
948 - * @param string $id The ID of the codemirror box.
949 - * @param string $placeholder The placeholder text for the codemirror box.
950 - *
951 801 * @return array|false
952 802 */
953 - private static function enqueue_codemirror( $id = 'frm_codemirror_box', $placeholder = '' ) {
803 + private static function enqueue_codemirror() {
954 804 if ( ! function_exists( 'wp_enqueue_code_editor' ) ) {
955 805 // The WordPress version is likely older than 4.9.
956 806 return false;
957 807 }
@@ -964,9 +814,8 @@
964 814 'tabSize' => 2,
965 815 // As the codemirror box only appears once you click into the Custom CSS tab, we need to auto-refresh.
966 816 // Otherwise the line numbers all end up with a 1px width causing overlap issues with the text in the content.
967 817 'autoRefresh' => true,
968 - 'placeholder' => $placeholder,
969 818 ),
970 819 )
971 820 );
972 821
@@ -973,11 +822,9 @@
973 822 if ( $settings ) {
974 823 wp_add_inline_script(
975 824 'code-editor',
976 825 sprintf(
977 - 'jQuery( function() { window.%s_wp_editor = wp.codeEditor.initialize( \'%s\', %s ); } );',
978 - $id,
979 - $id,
826 + 'jQuery( function() { wp.codeEditor.initialize( \'frm_codemirror_box\', %s ); } );',
980 827 wp_json_encode( $settings )
981 828 )
982 829 );
983 830 }
@@ -1029,35 +876,31 @@
1029 876 FrmAppHelper::permission_check( 'frm_change_settings' );
1030 877 check_ajax_referer( 'frm_ajax', 'nonce' );
1031 878
1032 879 $style_id = FrmAppHelper::get_post_param( 'style_id', '', 'absint' );
1033 -
1034 880 if ( ! $style_id ) {
1035 881 // A style ID is not sent when resetting on the edit page.
1036 882 // Instead of resetting the style, send the defaults back so the inputs can be updated with JavaScript.
1037 883 $frm_style = new FrmStyle();
1038 - echo json_encode( $frm_style->get_defaults() );
884 + $defaults = $frm_style->get_defaults();
885 + echo json_encode( $defaults );
1039 886 wp_die();
1040 887 }
1041 888
1042 - $frm_style = new FrmStyle();
1043 - $default_template_style = $frm_style->get_default_template_style( $style_id );
1044 - $where = array(
889 + $frm_style = new FrmStyle();
890 + $defaults = $frm_style->get_defaults();
891 + $default_post_content = FrmAppHelper::prepare_and_encode( $defaults );
892 + $where = array(
1045 893 'ID' => $style_id,
1046 894 'post_type' => self::$post_type,
1047 895 );
1048 -
1049 - $style_object = $frm_style->get_new();
1050 - $style_object->post_content = json_decode( $default_template_style, true );
1051 -
1052 896 global $wpdb;
1053 - $wpdb->update( $wpdb->posts, array( 'post_content' => $default_template_style ), $where );
897 + $wpdb->update( $wpdb->posts, array( 'post_content' => $default_post_content ), $where );
1054 898
1055 - // Save the settings after resetting to default or the old style will still appear.
1056 - $frm_style->save_settings();
899 + $frm_style->save_settings(); // Save the settings after resetting to default or the old style will still appear.
1057 900
1058 901 $data = array(
1059 - 'style' => FrmStylesCardHelper::get_style_param_for_card( $style_object ),
902 + 'style' => FrmStylesCardHelper::get_style_param_for_card( $frm_style->get_new() ),
1060 903 );
1061 904 wp_send_json_success( $data );
1062 905 wp_die();
1063 906 }
@@ -1072,15 +915,12 @@
1072 915 public static function change_styling() {
1073 916 FrmAppHelper::permission_check( 'frm_change_settings' );
1074 917 check_ajax_referer( 'frm_ajax', 'nonce' );
1075 918
1076 - $is_loaded_via_ajax = true;
1077 - $frm_style = new FrmStyle();
919 + $frm_style = new FrmStyle();
920 + $defaults = array(); // Intentionally avoid defaults here so nothing gets removed from our style.
921 + $style = '';
1078 922
1079 - // Intentionally avoid defaults here so nothing gets removed from our style.
1080 - $defaults = array();
1081 - $style = '';
1082 -
1083 923 echo '<style type="text/css">';
1084 924 include FrmAppHelper::plugin_path() . '/css/_single_theme.css.php';
1085 925 echo '</style>';
1086 926 wp_die();
@@ -1089,9 +929,9 @@
1089 929 /**
1090 930 * @return void
1091 931 */
1092 932 public static function add_meta_boxes() {
1093 - // Setup meta boxes
933 + // setup meta boxes
1094 934 $meta_boxes = array(
1095 935 'general' => __( 'General', 'formidable' ),
1096 936 'form-title' => __( 'Form Title', 'formidable' ),
1097 937 'form-description' => __( 'Form Description', 'formidable' ),
@@ -1121,9 +961,8 @@
1121 961
1122 962 /**
1123 963 * @param array $atts
1124 964 * @param array $sec
1125 - *
1126 965 * @return void
1127 966 */
1128 967 public static function include_style_section( $atts, $sec ) {
1129 968 extract( $atts ); // phpcs:ignore WordPress.PHP.DontExtract
@@ -1186,9 +1025,9 @@
1186 1025 }
1187 1026
1188 1027 /**
1189 1028 * Add an extra style rule to hide a broken style warning.
1190 - * To avoid cluttering the front end with any unnecessary styles this is only added when the referer URL matches the styler.
1029 + * To avoid cluttering the front end with any unecessary styles this is only added when the referer URL matches the styler.
1191 1030 *
1192 1031 * @since 6.2.3
1193 1032 *
1194 1033 * @return void
@@ -1194,10 +1033,9 @@
1194 1033 * @return void
1195 1034 */
1196 1035 public static function maybe_hide_sample_form_error_message() {
1197 1036 $referer = FrmAppHelper::get_server_value( 'HTTP_REFERER' );
1198 -
1199 - if ( str_contains( $referer, 'admin.php?page=formidable-styles' ) ) {
1037 + if ( false !== strpos( $referer, 'admin.php?page=formidable-styles' ) ) {
1200 1038 echo '#frm_broken_styles_warning { display: none; }';
1201 1039 }
1202 1040 }
1203 1041
@@ -1206,9 +1044,8 @@
1206 1044 *
1207 1045 * @since 4.11.03
1208 1046 *
1209 1047 * @param string $css CSS content.
1210 - *
1211 1048 * @return string
1212 1049 */
1213 1050 public static function replace_relative_url( $css ) {
1214 1051 $plugin_url = trailingslashit( FrmAppHelper::plugin_url() );
@@ -1231,27 +1068,22 @@
1231 1068 * Check if the Formidable styling should be loaded,
1232 1069 * then enqueue it for the footer
1233 1070 *
1234 1071 * @since 2.0
1235 - *
1236 - * @return void
1237 1072 */
1238 1073 public static function enqueue_style() {
1239 1074 global $frm_vars;
1240 1075
1241 - if ( ! empty( $frm_vars['css_loaded'] ) ) {
1076 + if ( isset( $frm_vars['css_loaded'] ) && $frm_vars['css_loaded'] ) {
1242 1077 // The CSS has already been loaded.
1243 1078 return;
1244 1079 }
1245 1080
1246 1081 $frm_settings = FrmAppHelper::get_settings();
1247 -
1248 - if ( $frm_settings->load_style === 'none' ) {
1249 - return;
1082 + if ( $frm_settings->load_style != 'none' ) {
1083 + wp_enqueue_style( 'formidable' );
1084 + $frm_vars['css_loaded'] = true;
1250 1085 }
1251 -
1252 - wp_enqueue_style( 'formidable' );
1253 - $frm_vars['css_loaded'] = true;
1254 1086 }
1255 1087
1256 1088 /**
1257 1089 * Get the stylesheets for the form settings page
@@ -1259,23 +1091,23 @@
1259 1091 * @return array<WP_Post>
1260 1092 */
1261 1093 public static function get_style_opts() {
1262 1094 $frm_style = new FrmStyle();
1263 - return $frm_style->get_all();
1095 + $styles = $frm_style->get_all();
1096 +
1097 + return $styles;
1264 1098 }
1265 1099
1266 1100 /**
1267 1101 * Get the style post object for a target form.
1268 1102 *
1269 - * @param bool|object|string $form
1270 - *
1103 + * @param object|string|boolean $form
1271 1104 * @return WP_Post|null
1272 1105 */
1273 1106 public static function get_form_style( $form = 'default' ) {
1274 1107 $style = FrmFormsHelper::get_form_style( $form );
1275 1108
1276 - // phpcs:ignore Universal.Operators.StrictComparisons
1277 - if ( ! $style || 1 == $style ) {
1109 + if ( empty( $style ) || 1 == $style ) {
1278 1110 $style = 'default';
1279 1111 }
1280 1112
1281 1113 $frm_style = new FrmStyle( $style );
@@ -1282,59 +1114,12 @@
1282 1114 return $frm_style->get_one();
1283 1115 }
1284 1116
1285 1117 /**
1286 - * Get the active style object for a field's form.
1287 - *
1288 - * @since 6.32
1289 - *
1290 - * @param array|int $field The 'field' array.
1291 - *
1292 - * @return object
1293 - */
1294 - public static function get_active_style( $field ) {
1295 - if ( ! is_array( $field ) ) {
1296 - return new stdClass();
1297 - }
1298 -
1299 - $form_id = $field['parent_form_id'] ?? $field['form_id'];
1300 -
1301 - if ( isset( self::$active_style[ $form_id ] ) ) {
1302 - return self::$active_style[ $form_id ];
1303 - }
1304 -
1305 - $active_style = self::get_form_style( $form_id );
1306 -
1307 - if ( ! is_object( $active_style ) ) {
1308 - $active_style = new stdClass();
1309 - }
1310 -
1311 - self::$active_style[ $form_id ] = $active_style;
1312 -
1313 - return self::$active_style[ $form_id ];
1314 - }
1315 -
1316 - /**
1317 - * Get the style setting key that stores the alignment for a field type.
1318 - *
1319 - * @since 6.32
1320 - *
1321 - * @param string $field_type
1322 - *
1323 - * @return string
1324 - */
1325 - public static function get_align_key_for_style_settings( $field_type ) {
1326 - return 'checkbox' === $field_type ? 'check_align' : 'radio_align';
1327 - }
1328 -
1329 - /**
1330 1118 * @param string $class
1331 1119 * @param string $style
1332 - *
1333 - * @return string
1334 1120 */
1335 1121 public static function get_form_style_class( $class, $style ) {
1336 - // phpcs:ignore Universal.Operators.StrictComparisons
1337 1122 if ( 1 == $style ) {
1338 1123 $style = 'default';
1339 1124 }
1340 1125
@@ -1349,18 +1134,15 @@
1349 1134 return $class;
1350 1135 }
1351 1136
1352 1137 /**
1353 - * @since 3.0
1354 - *
1355 1138 * @param object $style
1356 1139 * @param string $class
1357 1140 *
1358 - * @return void
1141 + * @since 3.0
1359 1142 */
1360 1143 private static function maybe_add_rtl_class( $style, &$class ) {
1361 1144 $is_rtl = isset( $style->post_content['direction'] ) && 'rtl' === $style->post_content['direction'];
1362 -
1363 1145 if ( $is_rtl ) {
1364 1146 $class .= ' frm_rtl';
1365 1147 }
1366 1148 }
@@ -1365,28 +1147,17 @@
1365 1147 }
1366 1148 }
1367 1149
1368 1150 /**
1369 - * @param string $val Style setting key.
1370 - * @param int|string $form Form ID or 'default'.
1371 - *
1372 - * @return mixed
1151 + * @param string $val
1373 1152 */
1374 1153 public static function get_style_val( $val, $form = 'default' ) {
1375 1154 $style = self::get_form_style( $form );
1376 -
1377 1155 if ( $style && isset( $style->post_content[ $val ] ) ) {
1378 1156 return $style->post_content[ $val ];
1379 1157 }
1380 -
1381 - return null;
1382 1158 }
1383 1159
1384 - /**
1385 - * @param array $default_styles
1386 - *
1387 - * @return array
1388 - */
1389 1160 public static function show_entry_styles( $default_styles ) {
1390 1161 $frm_style = new FrmStyle( 'default' );
1391 1162 $style = $frm_style->get_one();
1392 1163
@@ -1395,15 +1166,13 @@
1395 1166 }
1396 1167
1397 1168 foreach ( $default_styles as $name => $val ) {
1398 1169 $setting = $name;
1399 -
1400 - if ( 'border_width' === $name ) {
1170 + if ( 'border_width' == $name ) {
1401 1171 $setting = 'field_border_width';
1402 - } elseif ( 'alt_bg_color' === $name ) {
1172 + } elseif ( 'alt_bg_color' == $name ) {
1403 1173 $setting = 'bg_color_active';
1404 1174 }
1405 -
1406 1175 $default_styles[ $name ] = $style->post_content[ $setting ];
1407 1176 unset( $name, $val );
1408 1177 }
1409 1178
@@ -1409,104 +1178,16 @@
1409 1178
1410 1179 return $default_styles;
1411 1180 }
1412 1181
1413 - /**
1414 - * @param string $important
1415 - * @param array $field
1416 - *
1417 - * @return string
1418 - */
1419 - public static function important_style( $important, $field ) {
1420 - return self::get_style_val( 'important_style', $field['form_id'] );
1182 + public static function &important_style( $important, $field ) {
1183 + $important = self::get_style_val( 'important_style', $field['form_id'] );
1184 +
1185 + return $important;
1421 1186 }
1422 1187
1423 - /**
1424 - * Duplicate of WordPress do_accordion_section function, it adds an additional svg icon support.
1425 - *
1426 - * @since 6.8.3
1427 - *
1428 - * @param string|WP_Screen $screen Screen ID or screen object.
1429 - * @param string $context Meta box context.
1430 - * @param mixed $data_object Data object passed to callbacks.
1431 - *
1432 - * @return int
1433 - */
1434 - public static function do_accordion_sections( $screen, $context, $data_object ) { // phpcs:ignore SlevomatCodingStandard.Complexity.Cognitive.ComplexityTooHigh
1435 - global $wp_meta_boxes;
1436 -
1437 - // The symbol id from icons.svg
1438 - $icon_ids = array(
1439 - 'ranking-fields-style' => 'frm_chart_bar_icon',
1440 - 'section-fields-style' => 'frm-form-title-style',
1441 - );
1442 -
1443 - wp_enqueue_script( 'accordion' );
1444 -
1445 - if ( ! $screen ) {
1446 - $screen = get_current_screen();
1447 - } elseif ( is_string( $screen ) ) {
1448 - $screen = convert_to_screen( $screen );
1449 - }
1450 -
1451 - $page = $screen->id;
1452 -
1453 - // phpcs:disable Generic.WhiteSpace.ScopeIndent
1454 - ?>
1455 - <div id="side-sortables" class="accordion-container">
1456 - <ul class="outer-border">
1457 - <?php
1458 - $i = 0;
1459 - $first_open = false;
1460 -
1461 - if ( isset( $wp_meta_boxes[ $page ][ $context ] ) ) {
1462 - foreach ( array( 'high', 'core', 'default', 'low' ) as $priority ) {
1463 - if ( ! isset( $wp_meta_boxes[ $page ][ $context ][ $priority ] ) ) {
1464 - continue;
1465 - }
1466 -
1467 - foreach ( $wp_meta_boxes[ $page ][ $context ][ $priority ] as $box ) {
1468 - if ( false === $box || ! $box['title'] ) {
1469 - continue;
1470 - }
1471 -
1472 - ++$i;
1473 - $icon_id = array_key_exists( $box['id'], $icon_ids ) ? $icon_ids[ $box['id'] ] : 'frm-' . $box['id'];
1474 - $open_class = '';
1475 -
1476 - if ( ! $first_open ) {
1477 - $first_open = true;
1478 - $open_class = 'open';
1479 - }
1480 -
1481 - $accordion_content_id = 'frm_style_section_' . $box['id'];
1482 - ?>
1483 - <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'] ); ?>"><?php // phpcs:ignore SlevomatCodingStandard.Files.LineLength.LineTooLong ?>
1484 - <h3 class="accordion-section-title hndle">
1485 - <?php
1486 - FrmAppHelper::icon_by_class( 'frmfont ' . $icon_id . ' frm_svg24' );
1487 - echo esc_html( $box['title'] );
1488 - ?>
1489 - <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'] ); ?>"><?php // phpcs:ignore SlevomatCodingStandard.Files.LineLength.LineTooLong ?>
1490 - <?php FrmAppHelper::icon_by_class( 'frmfont frm_arrowdown8_icon' ); ?>
1491 - </button>
1492 - </h3>
1493 - <div class="accordion-section-content <?php postbox_classes( $box['id'], $page ); ?>" id="<?php echo esc_attr( $accordion_content_id ); ?>">
1494 - <div class="inside">
1495 - <?php call_user_func( $box['callback'], $data_object, $box ); ?>
1496 - </div><!-- .inside -->
1497 - </div><!-- .accordion-section-content -->
1498 - </li><!-- .accordion-section -->
1499 - <?php
1500 - }//end foreach
1501 - }//end foreach
1502 - }//end if
1503 - ?>
1504 - </ul><!-- .outer-border -->
1505 - </div><!-- .accordion-container -->
1506 - <?php
1507 - // phpcs:enable Generic.WhiteSpace.ScopeIndent
1508 - return $i;
1188 + public static function do_accordion_sections( $screen, $context, $object ) {
1189 + return do_accordion_sections( $screen, $context, $object );
1509 1190 }
1510 1191
1511 1192 /**
1512 1193 * Rename a style via an AJAX action.
@@ -1516,9 +1197,8 @@
1516 1197 * @return void
1517 1198 */
1518 1199 public static function rename_style() {
1519 1200 $permission_error = FrmAppHelper::permission_nonce_error( 'frm_edit_forms', 'nonce', 'frm_ajax' );
1520 -
1521 1201 if ( $permission_error !== false ) {
1522 1202 $data = array(
1523 1203 'message' => __( 'Unable to rename style', 'formidable' ),
1524 1204 );
@@ -1537,9 +1217,8 @@
1537 1217 die();
1538 1218 }
1539 1219
1540 1220 $post = get_post( $style_id );
1541 -
1542 1221 if ( ! $post || $post->post_type !== self::$post_type ) {
1543 1222 $data = array(
1544 1223 'message' => __( 'The style you are renaming either does not exist or it is not a style', 'formidable' ),
1545 1224 );
@@ -1560,9 +1239,8 @@
1560 1239 *
1561 1240 * @since 6.0
1562 1241 *
1563 1242 * @param WP_Styles $styles
1564 - *
1565 1243 * @return void
1566 1244 */
1567 1245 public static function disable_conflicting_wp_admin_css( $styles ) {
1568 1246 if ( ! FrmAppHelper::is_style_editor_page() ) {