PluginProbe
Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More / 5.5.4
Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More v5.5.4
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/helpers/FrmAppHelper.php +242 -398 6.5.15.5.4 View file →
@@ -15,9 +15,9 @@
15 15
16 16 /**
17 17 * @since 2.0
18 18 */
19 - public static $plug_version = '6.5.1';
19 + public static $plug_version = '5.5.4';
20 20
21 21 /**
22 22 * @since 1.07.02
23 23 *
@@ -148,28 +148,12 @@
148 148
149 149 public static function get_menu_name() {
150 150 $frm_settings = self::get_settings();
151 151
152 - return FrmAddonsController::is_license_expired() ? 'Formidable' : $frm_settings->menu;
152 + return $frm_settings->menu;
153 153 }
154 154
155 155 /**
156 - * Determine if the current branding is set to 'formidable'.
157 - *
158 - * Checks the menu title, retrieved through get_menu_name,
159 - * and verifies if it matches the 'formidable' branding.
160 - *
161 - * @since 6.4.2
162 - *
163 - * @return bool True if the menu title is 'formidable', false otherwise.
164 - */
165 - public static function is_formidable_branding() {
166 - $menu_title = self::get_menu_name();
167 -
168 - return 'formidable' === strtolower( trim( $menu_title ) );
169 - }
170 -
171 - /**
172 156 * @since 3.05
173 157 */
174 158 public static function svg_logo( $atts = array() ) {
175 159 $defaults = array(
@@ -268,15 +252,15 @@
268 252 global $pagenow;
269 253 $get_page = self::simple_get( 'page', 'sanitize_title' );
270 254 if ( $pagenow ) {
271 255 // allow this to be true during ajax load i.e. ajax form builder loading
272 - $is_page = ( $pagenow === 'admin.php' || $pagenow === 'admin-ajax.php' ) && $get_page === $page;
256 + $is_page = ( $pagenow == 'admin.php' || $pagenow == 'admin-ajax.php' ) && $get_page == $page;
273 257 if ( $is_page ) {
274 258 return true;
275 259 }
276 260 }
277 261
278 - return is_admin() && $get_page === $page;
262 + return is_admin() && $get_page == $page;
279 263 }
280 264
281 265 /**
282 266 * If the current page is for editing or creating a view.
@@ -348,18 +332,14 @@
348 332 * Check if on an admin page
349 333 *
350 334 * @since 2.0
351 335 *
336 + * @param None
337 + *
352 338 * @return boolean
353 339 */
354 340 public static function is_admin() {
355 - $is_admin = is_admin() && ! wp_doing_ajax();
356 -
357 - /**
358 - * @since 6.0
359 - * @param bool $is_admin
360 - */
361 - return apply_filters( 'frm_is_admin', $is_admin );
341 + return is_admin() && ! wp_doing_ajax();
362 342 }
363 343
364 344 /**
365 345 * Check if value contains blank value or empty array
@@ -392,37 +372,26 @@
392 372 return isset( $_SERVER[ $value ] ) ? wp_strip_all_tags( wp_unslash( $_SERVER[ $value ] ) ) : '';
393 373 }
394 374
395 375 /**
396 - * Get the server OS
376 + * Check for the IP address in several places
377 + * Used by [ip] shortcode
397 378 *
398 - * @since 6.4.2
399 - *
400 - * @return string
401 - */
402 - public static function get_server_os() {
403 - if ( function_exists( 'php_uname' ) ) {
404 - return php_uname( 's' );
405 - }
406 -
407 - if ( ! defined( 'PHP_OS' ) ) {
408 - return '';
409 - }
410 -
411 - // match the same response for Windows server as php_uname('s')
412 - return in_array( PHP_OS, array( 'WIN32', 'WINNT', 'Windows_NT' ), true ) ? 'Windows NT' : PHP_OS;
413 - }
414 -
415 - /**
416 - * Check for the IP address in several places (when custom headers are enabled).
417 - * Used by [ip] shortcode.
418 - *
419 379 * @return string The IP address of the current user
420 380 */
421 381 public static function get_ip_address() {
422 - $ip_options = self::should_use_custom_header_ip() ? self::get_custom_header_keys_for_ip() : array( 'REMOTE_ADDR' );
423 - $ip = '';
424 -
382 + $ip_options = array(
383 + 'HTTP_CLIENT_IP',
384 + 'HTTP_CF_CONNECTING_IP',
385 + 'HTTP_X_FORWARDED_FOR',
386 + 'HTTP_X_FORWARDED',
387 + 'HTTP_X_CLUSTER_CLIENT_IP',
388 + 'HTTP_X_REAL_IP',
389 + 'HTTP_FORWARDED_FOR',
390 + 'HTTP_FORWARDED',
391 + 'REMOTE_ADDR',
392 + );
393 + $ip = '';
425 394 foreach ( $ip_options as $key ) {
426 395 if ( ! isset( $_SERVER[ $key ] ) ) {
427 396 continue;
428 397 }
@@ -428,9 +397,9 @@
428 397 }
429 398
430 399 $key = self::get_server_value( $key );
431 400 foreach ( explode( ',', $key ) as $ip ) {
432 - $ip = trim( $ip ); // Just to be safe.
401 + $ip = trim( $ip ); // just to be safe.
433 402
434 403 if ( filter_var( $ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE ) !== false ) {
435 404 return sanitize_text_field( $ip );
436 405 }
@@ -439,52 +408,8 @@
439 408
440 409 return sanitize_text_field( $ip );
441 410 }
442 411
443 - /**
444 - * @since 6.1
445 - *
446 - * @return array
447 - */
448 - public static function get_custom_header_keys_for_ip() {
449 - return array(
450 - 'HTTP_CLIENT_IP',
451 - 'HTTP_CF_CONNECTING_IP',
452 - 'HTTP_X_FORWARDED_FOR',
453 - 'HTTP_X_FORWARDED',
454 - 'HTTP_X_CLUSTER_CLIENT_IP',
455 - 'HTTP_X_REAL_IP',
456 - 'HTTP_FORWARDED_FOR',
457 - 'HTTP_FORWARDED',
458 - 'REMOTE_ADDR',
459 - );
460 - }
461 -
462 - /**
463 - * Check if we should check every HTTP header or just $_SERVER['REMOTE_ADDR'].
464 - * The other HTTP headers can be spoofed so this isn't recommended.
465 - * But in some cases (like reverse proxies), the IP may be empty if you use $_SERVER['REMOTE_ADDR'].
466 - *
467 - * @since 6.1
468 - *
469 - * @return bool
470 - */
471 - private static function should_use_custom_header_ip() {
472 - $settings = self::get_settings();
473 - $should_use_custom_header_ip = ! $settings->no_ips && $settings->custom_header_ip;
474 -
475 - /**
476 - * Filter whether to check spoofable HTTP headers.
477 - * This uses the custom_header_ip setting, but it is hidden if the GDPR option is also on.
478 - * As the IP is still checked for blacklist checks, someone with the GDPR option may still want to enable this when behind a reverse proxy.
479 - *
480 - * @since 6.1
481 - *
482 - * @param bool $should_use_custom_header_ip
483 - */
484 - return apply_filters( 'frm_use_custom_header_ip', $should_use_custom_header_ip );
485 - }
486 -
487 412 public static function get_param( $param, $default = '', $src = 'get', $sanitize = '' ) {
488 413 if ( strpos( $param, '[' ) ) {
489 414 $params = explode( '[', $param );
490 415 $param = $params[0];
@@ -573,14 +498,14 @@
573 498 );
574 499 $args = wp_parse_args( $args, $defaults );
575 500
576 501 $value = $args['default'];
577 - if ( $args['type'] === 'get' ) {
502 + if ( $args['type'] == 'get' ) {
578 503 if ( $_GET && isset( $_GET[ $args['param'] ] ) ) {
579 504 // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized, WordPress.Security.NonceVerification.Missing
580 505 $value = wp_unslash( $_GET[ $args['param'] ] );
581 506 }
582 - } elseif ( $args['type'] === 'post' ) {
507 + } elseif ( $args['type'] == 'post' ) {
583 508 if ( isset( $_POST[ $args['param'] ] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing
584 509 // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized, WordPress.Security.NonceVerification.Missing
585 510 $value = wp_unslash( $_POST[ $args['param'] ] );
586 511 if ( $args['serialized'] === true && is_serialized_string( $value ) && is_serialized( $value ) ) {
@@ -1001,18 +926,8 @@
1001 926
1002 927 $html_atts = self::array_to_html_params( $atts );
1003 928
1004 929 $icon = trim( str_replace( array( 'frm_icon_font', 'frmfont ' ), '', $class ) );
1005 -
1006 - // Replace icons that have been removed.
1007 - $deprecated = array(
1008 - 'frm_clone_solid_icon' => 'frm_clone_icon',
1009 - );
1010 - if ( isset( $deprecated[ $icon ] ) ) {
1011 - $icon = $deprecated[ $icon ];
1012 - $class = str_replace( $icon, $deprecated[ $icon ], $class );
1013 - }
1014 -
1015 930 if ( $icon === $class ) {
1016 931 $icon = '<i class="' . esc_attr( $class ) . '"' . $html_atts . '></i>';
1017 932 } else {
1018 933 $class = strpos( $icon, ' ' ) === false ? '' : ' ' . $icon;
@@ -1069,9 +984,9 @@
1069 984 * @param array $allowed_attr
1070 985 * @return array
1071 986 */
1072 987 public static function allow_vars_in_styles( $allowed_attr ) {
1073 - $allowed_attr[] = '--primary-700';
988 + $allowed_attr[] = '--primary-hover';
1074 989 return $allowed_attr;
1075 990 }
1076 991
1077 992 /**
@@ -1080,9 +995,9 @@
1080 995 * @param bool $allow_css
1081 996 * @param string $css_string
1082 997 */
1083 998 public static function allow_style( $allow_css, $css_string ) {
1084 - if ( ! $allow_css && 0 === strpos( $css_string, '--primary-700:' ) ) {
999 + if ( ! $allow_css && 0 === strpos( $css_string, '--primary-hover:' ) ) {
1085 1000 $split = explode( ':', $css_string, 2 );
1086 1001 $allow_css = 2 === count( $split ) && self::is_a_valid_color( $split[1] );
1087 1002 }
1088 1003 return $allow_css;
@@ -1149,11 +1064,9 @@
1149 1064 if ( ! $echo ) {
1150 1065 ob_start();
1151 1066 }
1152 1067
1153 - if ( is_callable( $echo_function ) ) {
1154 - $echo_function();
1155 - }
1068 + $echo_function();
1156 1069
1157 1070 if ( ! $echo ) {
1158 1071 $return = ob_get_contents();
1159 1072 ob_end_clean();
@@ -1176,22 +1089,8 @@
1176 1089 include( self::plugin_path() . '/classes/views/shared/admin-header.php' );
1177 1090 }
1178 1091
1179 1092 /**
1180 - * @since 6.0
1181 - *
1182 - * @param string $type
1183 - * @return void
1184 - */
1185 - public static function import_link( $type = 'secondary' ) {
1186 - ?>
1187 - <a href="<?php echo esc_url( admin_url( 'admin.php?page=formidable-import' ) ); ?>" class="button frm-button-<?php echo esc_attr( $type ); ?> frm_animate_bg">
1188 - <?php esc_html_e( 'Import', 'formidable' ); ?>
1189 - </a>
1190 - <?php
1191 - }
1192 -
1193 - /**
1194 1093 * Print applicable admin banner.
1195 1094 *
1196 1095 * @since 5.4.2
1197 1096 *
@@ -1249,9 +1148,9 @@
1249 1148 return;
1250 1149 }
1251 1150
1252 1151 $href = ! empty( $atts['new_link'] ) ? esc_url( $atts['new_link'] ) : '#';
1253 - $class = 'button button-primary frm-button-primary';
1152 + $class = 'button button-primary frm-button-primary frm-with-plus';
1254 1153
1255 1154 if ( ! empty( $atts['trigger_new_form_modal'] ) ) {
1256 1155 $class .= ' frm-trigger-new-form-modal';
1257 1156 }
@@ -1321,14 +1220,11 @@
1321 1220 }
1322 1221 }
1323 1222
1324 1223 /**
1325 - * Save all front-end js scripts into a single file.
1326 - * And save an additional single file of all front-end Stripe JS scripts.
1224 + * Save all front-end js scripts into a single file
1327 1225 *
1328 1226 * @since 3.0
1329 - *
1330 - * @return void
1331 1227 */
1332 1228 public static function save_combined_js() {
1333 1229 $file_atts = apply_filters(
1334 1230 'frm_js_location',
@@ -1341,34 +1237,10 @@
1341 1237
1342 1238 $files = array(
1343 1239 self::plugin_path() . '/js/formidable.min.js',
1344 1240 );
1345 - /**
1346 - * @param array $files
1347 - */
1348 1241 $files = apply_filters( 'frm_combined_js_files', $files );
1349 1242 $new_file->combine_files( $files );
1350 -
1351 - // Create the minified Stripe Script.
1352 - $file_atts = apply_filters(
1353 - 'frm_stripe_js_location',
1354 - array(
1355 - 'file_name' => 'frmstrp.min.js',
1356 - 'new_file_path' => self::plugin_path() . '/js',
1357 - )
1358 - );
1359 - $new_file = new FrmCreateFile( $file_atts );
1360 - $files = array(
1361 - FrmStrpLiteAppHelper::plugin_path() . 'js/frmstrp.min.js',
1362 - );
1363 -
1364 - /**
1365 - * @since 6.5
1366 - *
1367 - * @param array $files
1368 - */
1369 - $files = apply_filters( 'frm_stripe_combined_js_files', $files );
1370 - $new_file->combine_files( $files );
1371 1243 }
1372 1244
1373 1245 /**
1374 1246 * Check a value from a shortcode to see if true or false.
@@ -1550,37 +1422,18 @@
1550 1422 self::is_full_screen_view_builder_page();
1551 1423 }
1552 1424
1553 1425 /**
1554 - * Check if user is on the style editor or its alternative URL.
1426 + * Check if user is on the style editor, or the alternative URL.
1555 1427 * The first URL is a submenu "Styles" in the Formidable menu /wp-admin/admin.php?page=formidable-styles.
1556 1428 * The alternative URL is linked as a submenu "Forms" item of the Appearance menu /wp-admin/themes.php?page=formidable-styles2.
1557 1429 *
1558 1430 * @since 5.5.3
1559 - * @since 6.0 Added the $view parameter. Previously there was only a 'edit' view.
1560 1431 *
1561 - * @param string $view Supports 'edit', 'list', and ''. If '', both 'edit' and 'list' will match.
1562 1432 * @return bool
1563 1433 */
1564 - public static function is_style_editor_page( $view = '' ) {
1565 - if ( ! self::is_admin_page( 'formidable-styles' ) && ! self::is_admin_page( 'formidable-styles2' ) ) {
1566 - return false;
1567 - }
1568 -
1569 - if ( ! in_array( $view, array( 'list', 'edit' ), true ) ) {
1570 - return true;
1571 - }
1572 -
1573 - $action = self::simple_get( 'frm_action' );
1574 - $is_edit_mode = 'edit' === $action || ( ! $action && ! self::simple_get( 'id' ) && ! self::simple_get( 'form' ) );
1575 -
1576 - if ( ! $is_edit_mode && class_exists( 'FrmProStylesController' ) && in_array( $action, array( 'new_style', 'duplicate' ), true ) ) {
1577 - $is_edit_mode = true;
1578 - }
1579 -
1580 - $checking_for_edit_mode = 'edit' === $view;
1581 -
1582 - return $is_edit_mode === $checking_for_edit_mode;
1434 + public static function is_style_editor_page() {
1435 + return self::is_admin_page( 'formidable-styles' ) || self::is_admin_page( 'formidable-styles2' );
1583 1436 }
1584 1437
1585 1438 /**
1586 1439 * @since 5.5.3
@@ -1901,9 +1754,9 @@
1901 1754 foreach ( $array as $key => $value ) {
1902 1755 if ( is_array( $value ) ) {
1903 1756 $return = array_merge( $return, self::array_flatten( $value, $keys ) );
1904 1757 } else {
1905 - if ( $keys === 'keep' ) {
1758 + if ( $keys == 'keep' ) {
1906 1759 $return[ $key ] = $value;
1907 1760 } else {
1908 1761 $return[] = $value;
1909 1762 }
@@ -1987,9 +1840,9 @@
1987 1840 return $user_id;
1988 1841 }
1989 1842
1990 1843 $user_id = sanitize_text_field( $user_id );
1991 - if ( $user_id === 'current' ) {
1844 + if ( $user_id == 'current' ) {
1992 1845 $user_id = get_current_user_id();
1993 1846 } else {
1994 1847 if ( is_email( $user_id ) ) {
1995 1848 $user = get_user_by( 'email', $user_id );
@@ -2457,9 +2310,9 @@
2457 2310 *
2458 2311 * @return string $time_ago
2459 2312 */
2460 2313 public static function human_time_diff( $from, $to = '', $levels = 1 ) {
2461 - if ( empty( $to ) && 0 !== $to ) {
2314 + if ( empty( $to ) ) {
2462 2315 $now = new DateTime();
2463 2316 } else {
2464 2317 $now = new DateTime( '@' . $to );
2465 2318 }
@@ -2710,9 +2563,8 @@
2710 2563 'reply_to' => __( 'If you would like a different reply to address than the "from" address, add a single address here. FORMAT: Name <name@email.com> or name@email.com.', 'formidable' ),
2711 2564 'from' => __( 'Enter the name and/or email address of the sender. FORMAT: John Bates <john@example.com> or john@example.com.', 'formidable' ),
2712 2565 /* translators: %1$s: Form name, %2$s: Date */
2713 2566 'email_subject' => esc_attr( sprintf( __( 'If you leave the subject blank, the default will be used: %1$s Form submitted on %2$s', 'formidable' ), $form_name, self::site_name() ) ),
2714 - 'new_tab' => __( 'This option will open the link in a new browser tab. Please note that some popup blockers may prevent this from happening, in which case the link will be displayed.', 'formidable' ),
2715 2567 );
2716 2568
2717 2569 if ( ! isset( $tooltips[ $name ] ) ) {
2718 2570 return;
@@ -2801,15 +2653,12 @@
2801 2653 }
2802 2654 }
2803 2655
2804 2656 /**
2805 - * Check for either json or serialized data. This is temporary while transitioning
2657 + * Check for either json or serilized data. This is temporary while transitioning
2806 2658 * all data to json.
2807 2659 *
2808 2660 * @since 4.02.03
2809 - *
2810 - * @param array|string $value
2811 - * @return void
2812 2661 */
2813 2662 public static function unserialize_or_decode( &$value ) {
2814 2663 if ( is_array( $value ) ) {
2815 2664 return;
@@ -2815,9 +2664,9 @@
2815 2664 return;
2816 2665 }
2817 2666
2818 2667 if ( is_serialized( $value ) ) {
2819 - $value = self::maybe_unserialize_array( $value );
2668 + $value = maybe_unserialize( $value );
2820 2669 } else {
2821 2670 $value = self::maybe_json_decode( $value, false );
2822 2671 }
2823 2672 }
@@ -2822,35 +2671,8 @@
2822 2671 }
2823 2672 }
2824 2673
2825 2674 /**
2826 - * Safely unserialize an array if necessary.
2827 - * This function doesn't actually use unserialize. The string is parsed instead.
2828 - *
2829 - * @since 6.2
2830 - *
2831 - * @param mixed $value
2832 - * @return mixed
2833 - */
2834 - public static function maybe_unserialize_array( $value ) {
2835 - if ( ! is_string( $value ) ) {
2836 - return $value;
2837 - }
2838 -
2839 - // Since we only expect an array, skip anything that doesn't start with a:.
2840 - if ( ! is_serialized( $value ) || 'a:' !== substr( $value, 0, 2 ) ) {
2841 - return $value;
2842 - }
2843 -
2844 - $parsed = FrmSerializedStringParserHelper::get()->parse( $value );
2845 - if ( is_array( $parsed ) ) {
2846 - $value = $parsed;
2847 - }
2848 -
2849 - return $value;
2850 - }
2851 -
2852 - /**
2853 2675 * Decode a JSON string.
2854 2676 * Do not switch shortcodes like [24] to array unless intentional ie XML values.
2855 2677 *
2856 2678 * @param mixed $string
@@ -2877,36 +2699,8 @@
2877 2699 return $string;
2878 2700 }
2879 2701
2880 2702 /**
2881 - * @since 6.2.3
2882 - *
2883 - * @param string $value
2884 - * @return string
2885 - */
2886 - public static function maybe_utf8_encode( $value ) {
2887 - $from_format = 'ISO-8859-1';
2888 - $to_format = 'UTF-8';
2889 -
2890 - if ( function_exists( 'mb_check_encoding' ) && function_exists( 'mb_convert_encoding' ) ) {
2891 - if ( mb_check_encoding( $value, $from_format ) ) {
2892 - return mb_convert_encoding( $value, $to_format, $from_format );
2893 - }
2894 - return $value;
2895 - }
2896 -
2897 - if ( function_exists( 'iconv' ) ) {
2898 - $converted = iconv( $from_format, $to_format, $value );
2899 - // Value is false if $value is not ISO-8859-1.
2900 - if ( false !== $converted ) {
2901 - return $converted;
2902 - }
2903 - }
2904 -
2905 - return $value;
2906 - }
2907 -
2908 - /**
2909 2703 * Reformat the json serialized array in name => value array.
2910 2704 *
2911 2705 * @since 4.02.03
2912 2706 */
@@ -3002,10 +2796,13 @@
3002 2796 */
3003 2797 public static function localize_script( $location ) {
3004 2798 global $wp_scripts;
3005 2799
2800 + $ajax_url = admin_url( 'admin-ajax.php', is_ssl() ? 'admin' : 'http' );
2801 + $ajax_url = apply_filters( 'frm_ajax_url', $ajax_url );
2802 +
3006 2803 $script_strings = array(
3007 - 'ajax_url' => esc_url_raw( self::get_ajax_url() ),
2804 + 'ajax_url' => $ajax_url,
3008 2805 'images_url' => self::plugin_url() . '/images',
3009 2806 'loading' => __( 'Loading&hellip;', 'formidable' ),
3010 2807 'remove' => __( 'Remove', 'formidable' ),
3011 2808 'offset' => apply_filters( 'frm_scroll_offset', 4 ),
@@ -3019,72 +2816,70 @@
3019 2816 'include_alert_role' => self::should_include_alert_role_on_field_errors(),
3020 2817 );
3021 2818
3022 2819 $data = $wp_scripts->get_data( 'formidable', 'data' );
3023 - if ( ! $data ) {
2820 + if ( empty( $data ) ) {
3024 2821 wp_localize_script( 'formidable', 'frm_js', $script_strings );
3025 2822 }
3026 2823
3027 - if ( $location === 'admin' ) {
2824 + if ( $location == 'admin' ) {
3028 2825 $frm_settings = self::get_settings();
3029 2826 $admin_script_strings = array(
3030 - 'desc' => __( '(Click to add description)', 'formidable' ),
3031 - 'blank' => __( '(Blank)', 'formidable' ),
3032 - 'no_label' => __( '(no label)', 'formidable' ),
3033 - 'ok' => __( 'OK', 'formidable' ),
3034 - 'cancel' => __( 'Cancel', 'formidable' ),
3035 - 'default_label' => __( 'Default', 'formidable' ),
3036 - 'clear_default' => __( 'Clear default value when typing', 'formidable' ),
3037 - 'no_clear_default' => __( 'Do not clear default value when typing', 'formidable' ),
3038 - 'valid_default' => __( 'Default value will pass form validation', 'formidable' ),
3039 - 'no_valid_default' => __( 'Default value will NOT pass form validation', 'formidable' ),
3040 - 'confirm' => __( 'Are you sure?', 'formidable' ),
3041 - 'conf_delete' => __( 'Are you sure you want to delete this field and all data associated with it?', 'formidable' ),
3042 - 'conf_delete_sec' => __( 'All fields inside this Section will be deleted along with their data. Are you sure you want to delete this group of fields?', 'formidable' ),
3043 - 'conf_no_repeat' => __( 'Warning: If you have entries with multiple rows, all but the first row will be lost.', 'formidable' ),
3044 - 'default_unique' => $frm_settings->unique_msg,
3045 - 'default_conf' => __( 'The entered values do not match', 'formidable' ),
3046 - 'enter_email' => __( 'Enter Email', 'formidable' ),
3047 - 'confirm_email' => __( 'Confirm Email', 'formidable' ),
3048 - 'conditional_text' => __( 'Conditional content here', 'formidable' ),
3049 - 'new_option' => __( 'New Option', 'formidable' ),
3050 - 'css_invalid_size' => __( 'In certain browsers (e.g. Firefox) text will not display correctly if the field height is too small relative to the field padding and text size. Please increase your field height or decrease your field padding.', 'formidable' ),
3051 - 'enter_password' => __( 'Enter Password', 'formidable' ),
3052 - 'confirm_password' => __( 'Confirm Password', 'formidable' ),
3053 - 'import_complete' => __( 'Import Complete', 'formidable' ),
3054 - 'updating' => __( 'Please wait while your site updates.', 'formidable' ),
3055 - 'no_save_warning' => __( 'Warning: There is no way to retrieve unsaved entries.', 'formidable' ),
3056 - 'private_label' => __( 'Private', 'formidable' ),
3057 - 'jquery_ui_url' => '',
3058 - 'pro_url' => is_callable( 'FrmProAppHelper::plugin_url' ) ? FrmProAppHelper::plugin_url() : '',
3059 - 'no_licenses' => __( 'No new licenses were found', 'formidable' ),
3060 - 'unmatched_parens' => __( 'This calculation has at least one unmatched ( ) { } [ ].', 'formidable' ),
3061 - 'view_shortcodes' => __( 'This calculation may have shortcodes that work in Views but not forms.', 'formidable' ),
3062 - 'text_shortcodes' => __( 'This calculation may have shortcodes that work in text calculations but not numeric calculations.', 'formidable' ),
3063 - 'only_one_action' => __( 'This form action is limited to one per form. Please edit the existing form action.', 'formidable' ),
3064 - 'unsafe_params' => FrmFormsHelper::reserved_words(),
2827 + 'desc' => __( '(Click to add description)', 'formidable' ),
2828 + 'blank' => __( '(Blank)', 'formidable' ),
2829 + 'no_label' => __( '(no label)', 'formidable' ),
2830 + 'saving' => esc_attr( __( 'Saving', 'formidable' ) ),
2831 + 'saved' => esc_attr( __( 'Saved', 'formidable' ) ),
2832 + 'ok' => __( 'OK', 'formidable' ),
2833 + 'cancel' => __( 'Cancel', 'formidable' ),
2834 + 'default_label' => __( 'Default', 'formidable' ),
2835 + 'clear_default' => __( 'Clear default value when typing', 'formidable' ),
2836 + 'no_clear_default' => __( 'Do not clear default value when typing', 'formidable' ),
2837 + 'valid_default' => __( 'Default value will pass form validation', 'formidable' ),
2838 + 'no_valid_default' => __( 'Default value will NOT pass form validation', 'formidable' ),
2839 + 'caution' => __( 'Heads up', 'formidable' ),
2840 + 'confirm' => __( 'Are you sure?', 'formidable' ),
2841 + 'conf_delete' => __( 'Are you sure you want to delete this field and all data associated with it?', 'formidable' ),
2842 + 'conf_delete_sec' => __( 'All fields inside this Section will be deleted along with their data. Are you sure you want to delete this group of fields?', 'formidable' ),
2843 + 'conf_no_repeat' => __( 'Warning: If you have entries with multiple rows, all but the first row will be lost.', 'formidable' ),
2844 + 'default_unique' => $frm_settings->unique_msg,
2845 + 'default_conf' => __( 'The entered values do not match', 'formidable' ),
2846 + 'enter_email' => __( 'Enter Email', 'formidable' ),
2847 + 'confirm_email' => __( 'Confirm Email', 'formidable' ),
2848 + 'conditional_text' => __( 'Conditional content here', 'formidable' ),
2849 + 'new_option' => __( 'New Option', 'formidable' ),
2850 + 'css_invalid_size' => __( 'In certain browsers (e.g. Firefox) text will not display correctly if the field height is too small relative to the field padding and text size. Please increase your field height or decrease your field padding.', 'formidable' ),
2851 + 'enter_password' => __( 'Enter Password', 'formidable' ),
2852 + 'confirm_password' => __( 'Confirm Password', 'formidable' ),
2853 + 'import_complete' => __( 'Import Complete', 'formidable' ),
2854 + 'updating' => __( 'Please wait while your site updates.', 'formidable' ),
2855 + 'no_save_warning' => __( 'Warning: There is no way to retrieve unsaved entries.', 'formidable' ),
2856 + 'private_label' => __( 'Private', 'formidable' ),
2857 + 'jquery_ui_url' => '',
2858 + 'pro_url' => is_callable( 'FrmProAppHelper::plugin_url' ) ? FrmProAppHelper::plugin_url() : '',
2859 + 'no_licenses' => __( 'No new licenses were found', 'formidable' ),
2860 + 'unmatched_parens' => __( 'This calculation has at least one unmatched ( ) { } [ ].', 'formidable' ),
2861 + 'view_shortcodes' => __( 'This calculation may have shortcodes that work in Views but not forms.', 'formidable' ),
2862 + 'text_shortcodes' => __( 'This calculation may have shortcodes that work in text calculations but not numeric calculations.', 'formidable' ),
2863 + 'only_one_action' => __( 'This form action is limited to one per form. Please edit the existing form action.', 'formidable' ),
2864 + 'unsafe_params' => FrmFormsHelper::reserved_words(),
3065 2865 /* Translators: %s is the name of a Detail Page Slug that is a reserved word.*/
3066 - 'slug_is_reserved' => sprintf( __( 'The Detail Page Slug "%s" is reserved by WordPress. This may cause problems. Is this intentional?', 'formidable' ), '****' ),
2866 + 'slug_is_reserved' => sprintf( __( 'The Detail Page Slug "%s" is reserved by WordPress. This may cause problems. Is this intentional?', 'formidable' ), '****' ),
3067 2867 /* Translators: %s is the name of a parameter that is a reserved word. More than one word could be listed here, though that would not be common. */
3068 - 'param_is_reserved' => sprintf( __( 'The parameter "%s" is reserved by WordPress. This may cause problems when included in the URL. Is this intentional? ', 'formidable' ), '****' ),
3069 - 'reserved_words' => __( 'See the list of reserved words in WordPress.', 'formidable' ),
3070 - 'repeat_limit_min' => __( 'Please enter a Repeat Limit that is greater than 1.', 'formidable' ),
3071 - 'checkbox_limit' => __( 'Please select a limit between 0 and 200.', 'formidable' ),
3072 - 'install' => __( 'Install', 'formidable' ),
3073 - 'active' => __( 'Active', 'formidable' ),
3074 - 'select_a_field' => __( 'Select a Field', 'formidable' ),
3075 - 'no_items_found' => __( 'No items found.', 'formidable' ),
2868 + 'param_is_reserved' => sprintf( __( 'The parameter "%s" is reserved by WordPress. This may cause problems when included in the URL. Is this intentional? ', 'formidable' ), '****' ),
2869 + 'reserved_words' => __( 'See the list of reserved words in WordPress.', 'formidable' ),
2870 + 'repeat_limit_min' => __( 'Please enter a Repeat Limit that is greater than 1.', 'formidable' ),
2871 + 'checkbox_limit' => __( 'Please select a limit between 0 and 200.', 'formidable' ),
2872 + 'install' => __( 'Install', 'formidable' ),
2873 + 'active' => __( 'Active', 'formidable' ),
2874 + 'select_a_field' => __( 'Select a Field', 'formidable' ),
2875 + 'no_items_found' => __( 'No items found.', 'formidable' ),
3076 2876 'field_already_used' => __( 'Oops. You have already used that field.', 'formidable' ),
3077 - 'saving' => '', // Deprecated in 6.0.
3078 - 'saved' => '', // Deprecated in 6.0.
3079 2877 );
3080 - /**
3081 - * @param array $admin_script_strings
3082 - */
3083 2878 $admin_script_strings = apply_filters( 'frm_admin_script_strings', $admin_script_strings );
3084 2879
3085 2880 $data = $wp_scripts->get_data( 'formidable_admin', 'data' );
3086 - if ( ! $data ) {
2881 + if ( empty( $data ) ) {
3087 2882 wp_localize_script( 'formidable_admin', 'frm_admin_js', $admin_script_strings );
3088 2883 }
3089 2884 }
3090 2885 }
@@ -3089,24 +2884,8 @@
3089 2884 }
3090 2885 }
3091 2886
3092 2887 /**
3093 - * @since 6.5
3094 - *
3095 - * @return string
3096 - */
3097 - public static function get_ajax_url() {
3098 - $ajax_url = admin_url( 'admin-ajax.php', is_ssl() ? 'admin' : 'http' );
3099 -
3100 - /**
3101 - * @since 2.0.13
3102 - *
3103 - * @param string $ajax_url
3104 - */
3105 - return apply_filters( 'frm_ajax_url', $ajax_url );
3106 - }
3107 -
3108 - /**
3109 2888 * Returns whether or not the first errored input should be auto-focused (default true).
3110 2889 *
3111 2890 * @since 5.2.05
3112 2891 *
@@ -3834,40 +3613,8 @@
3834 3613 return get_plugins();
3835 3614 }
3836 3615
3837 3616 /**
3838 - * Make sure that the file we're trying to load is in fact the expected file type, and that it's coming from our S3 bucket.
3839 - * This is to make sure that the URL can't be exploited for a SSRF attack.
3840 - *
3841 - * @since 5.5.5
3842 - *
3843 - * @param string $url
3844 - * @param string $expected_extension
3845 - * @return bool
3846 - */
3847 - public static function validate_url_is_in_s3_bucket( $url, $expected_extension ) {
3848 - $file_is_in_expected_s3_bucket = 0 === strpos( $url, 'https://s3.amazonaws.com/fp.strategy11.com' );
3849 - if ( ! $file_is_in_expected_s3_bucket ) {
3850 - return false;
3851 - }
3852 -
3853 - $parsed = parse_url( $url );
3854 - if ( ! is_array( $parsed ) ) {
3855 - // URL is malformed.
3856 - return false;
3857 - }
3858 -
3859 - $path = $parsed['path'];
3860 - $ext = pathinfo( $path, PATHINFO_EXTENSION );
3861 - if ( $expected_extension !== $ext ) {
3862 - // The URL isn't to an XML file.
3863 - return false;
3864 - }
3865 -
3866 - return true;
3867 - }
3868 -
3869 - /**
3870 3617 * @since 4.08
3871 3618 * @deprecated 4.09.01
3872 3619 */
3873 3620 public static function expiring_message() {
@@ -3896,8 +3643,18 @@
3896 3643 FrmFormsHelper::insert_opt_html( $args );
3897 3644 }
3898 3645
3899 3646 /**
3647 + * Used to filter shortcode in text widgets
3648 + *
3649 + * @deprecated 2.5.4
3650 + * @codeCoverageIgnore
3651 + */
3652 + public static function widget_text_filter_callback( $matches ) {
3653 + return FrmDeprecated::widget_text_filter_callback( $matches );
3654 + }
3655 +
3656 + /**
3900 3657 * @deprecated 3.01
3901 3658 * @codeCoverageIgnore
3902 3659 */
3903 3660 public static function sanitize_array( &$values ) {
@@ -3904,86 +3661,173 @@
3904 3661 FrmDeprecated::sanitize_array( $values );
3905 3662 }
3906 3663
3907 3664 /**
3908 - * @since 2.0
3909 - * @deprecated 5.0.13
3665 + * @param array $settings
3666 + * @param string $group
3910 3667 *
3911 - * @return string The base Google APIS url for the current version of jQuery UI
3668 + * @since 2.0.6
3669 + * @deprecated 2.05.06
3670 + * @codeCoverageIgnore
3912 3671 */
3913 - public static function jquery_ui_base_url() {
3914 - _deprecated_function( __FUNCTION__, '5.0.13', 'FrmProAppHelper::jquery_ui_base_url' );
3915 - return is_callable( 'FrmProAppHelper::jquery_ui_base_url' ) ? FrmProAppHelper::jquery_ui_base_url() : '';
3672 + public static function save_settings( $settings, $group ) {
3673 + return FrmDeprecated::save_settings( $settings, $group );
3916 3674 }
3917 3675
3918 3676 /**
3919 - * @since 4.07
3920 - * @deprecated 6.0
3677 + * @since 2.0.4
3678 + * @deprecated 2.05.06
3679 + * @codeCoverageIgnore
3921 3680 */
3922 - public static function renewal_message() {
3923 - _deprecated_function( __METHOD__, '6.0', 'FrmProAddonsController::renewal_message' );
3681 + public static function save_json_post( $settings ) {
3682 + return FrmDeprecated::save_json_post( $settings );
3924 3683 }
3925 3684
3926 3685 /**
3927 - * Display a dismissable warning message and save its dismissal state.
3686 + * @since 2.0
3687 + * @deprecated 2.05.06
3688 + * @codeCoverageIgnore
3928 3689 *
3929 - * @since 6.3
3690 + * @param string $cache_key The unique name for this cache
3691 + * @param string $group The name of the cache group
3692 + * @param string $query If blank, don't run a db call
3693 + * @param string $type The wpdb function to use with this query
3930 3694 *
3931 - * @param string $message The warning message to display.
3932 - * @param string $option The unique identifier for the dismissal state of the message and the WP Ajax action.
3933 - * @return void
3695 + * @return mixed $results The cache or query results
3934 3696 */
3935 - public static function add_dismissable_warning_message( $message = '', $option = '' ) {
3936 - if ( ! $message || ! $option ) {
3937 - return;
3938 - }
3697 + public static function check_cache( $cache_key, $group = '', $query = '', $type = 'get_var', $time = 300 ) {
3698 + return FrmDeprecated::check_cache( $cache_key, $group, $query, $type, $time );
3699 + }
3939 3700
3940 - $ajax_callback = function() use ( $option ) {
3941 - self::dismiss_warning_message( $option );
3942 - };
3701 + /**
3702 + * @deprecated 2.05.06
3703 + * @codeCoverageIgnore
3704 + */
3705 + public static function set_cache( $cache_key, $results, $group = '', $time = 300 ) {
3706 + return FrmDeprecated::set_cache( $cache_key, $results, $group, $time );
3707 + }
3943 3708
3944 - // We're handling JS codes with `doJsonPost` and it adds 'frm_' to the beginning of the action.
3945 - // To prevent any issues, we add 'frm_' from the beginning of the action.
3946 - add_action( 'wp_ajax_frm_' . $option, $ajax_callback );
3709 + /**
3710 + * @deprecated 2.05.06
3711 + * @codeCoverageIgnore
3712 + */
3713 + public static function add_key_to_group_cache( $key, $group ) {
3714 + FrmDeprecated::add_key_to_group_cache( $key, $group );
3715 + }
3947 3716
3948 - add_filter(
3949 - 'frm_message_list',
3950 - function( $show_messages ) use ( $message, $option ) {
3951 - if ( get_option( $option, false ) ) {
3952 - return $show_messages;
3953 - }
3717 + /**
3718 + * @deprecated 2.05.06
3719 + * @codeCoverageIgnore
3720 + */
3721 + public static function get_group_cached_keys( $group ) {
3722 + return FrmDeprecated::get_group_cached_keys( $group );
3723 + }
3954 3724
3955 - $dismiss_icon = self::icon_by_class(
3956 - 'frmfont frm_close_icon',
3957 - array(
3958 - 'aria-label' => _x( 'Dismiss', 'warning message: close icon label', 'formidable' ),
3959 - 'echo' => false,
3960 - )
3961 - );
3725 + /**
3726 + * @since 2.0
3727 + * @deprecated 2.05.06
3728 + * @codeCoverageIgnore
3729 + * @return mixed The cached value or false
3730 + */
3731 + public static function check_cache_and_transient( $cache_key ) {
3732 + return FrmDeprecated::check_cache( $cache_key );
3733 + }
3962 3734
3963 - $show_messages[] = $message;
3964 - $show_messages[] = '<span class="frm-warning-dismiss frmsvg" data-action="' . esc_attr( $option ) . '">' . $dismiss_icon . '</span>';
3735 + /**
3736 + * @since 2.0
3737 + * @deprecated 2.05.06
3738 + * @codeCoverageIgnore
3739 + *
3740 + * @param string $cache_key
3741 + */
3742 + public static function delete_cache_and_transient( $cache_key, $group = 'default' ) {
3743 + FrmDeprecated::delete_cache_and_transient( $cache_key, $group );
3744 + }
3965 3745
3966 - return $show_messages;
3967 - }
3968 - );
3746 + /**
3747 + * @since 2.0
3748 + * @deprecated 2.05.06
3749 + * @codeCoverageIgnore
3750 + *
3751 + * @param string $group The name of the cache group
3752 + */
3753 + public static function cache_delete_group( $group ) {
3754 + FrmDeprecated::cache_delete_group( $group );
3969 3755 }
3970 3756
3971 3757 /**
3972 - * Dismiss a warning message and update the dismissal state.
3758 + * @since 1.07.10
3759 + * @deprecated 2.05.06
3760 + * @codeCoverageIgnore
3973 3761 *
3974 - * @since 6.3
3762 + * @param string $term The value to escape
3975 3763 *
3976 - * @param string $option The unique identifier for the dismissal state of the message.
3977 - * @return void
3764 + * @return string The escaped value
3978 3765 */
3979 - public static function dismiss_warning_message( $option = '' ) {
3980 - self::permission_check( 'frm_change_settings' );
3981 - check_ajax_referer( 'frm_ajax', 'nonce' );
3766 + public static function esc_like( $term ) {
3767 + return FrmDeprecated::esc_like( $term );
3768 + }
3982 3769
3983 - if ( $option ) {
3984 - update_option( $option, true, 'no' );
3985 - }
3770 + /**
3771 + * @param string $order_query
3772 + *
3773 + * @deprecated 2.05.06
3774 + * @codeCoverageIgnore
3775 + */
3776 + public static function esc_order( $order_query ) {
3777 + return FrmDeprecated::esc_order( $order_query );
3778 + }
3986 3779
3987 - wp_send_json_success();
3780 + /**
3781 + * @deprecated 2.05.06
3782 + * @codeCoverageIgnore
3783 + */
3784 + public static function esc_order_by( &$order_by ) {
3785 + FrmDeprecated::esc_order_by( $order_by );
3786 + }
3787 +
3788 + /**
3789 + * @param string $limit
3790 + *
3791 + * @deprecated 2.05.06
3792 + * @codeCoverageIgnore
3793 + */
3794 + public static function esc_limit( $limit ) {
3795 + return FrmDeprecated::esc_limit( $limit );
3796 + }
3797 +
3798 + /**
3799 + * @since 2.0
3800 + * @deprecated 2.05.06
3801 + * @codeCoverageIgnore
3802 + */
3803 + public static function prepare_array_values( $array, $type = '%s' ) {
3804 + return FrmDeprecated::prepare_array_values( $array, $type );
3805 + }
3806 +
3807 + /**
3808 + * @deprecated 2.05.06
3809 + * @codeCoverageIgnore
3810 + */
3811 + public static function prepend_and_or_where( $starts_with = ' WHERE ', $where = '' ) {
3812 + return FrmDeprecated::prepend_and_or_where( $starts_with, $where );
3813 + }
3814 +
3815 + /**
3816 + * @since 2.0
3817 + * @deprecated 5.0.13
3818 + *
3819 + * @return string The base Google APIS url for the current version of jQuery UI
3820 + */
3821 + public static function jquery_ui_base_url() {
3822 + _deprecated_function( __FUNCTION__, '5.0.13', 'FrmProAppHelper::jquery_ui_base_url' );
3823 + return is_callable( 'FrmProAppHelper::jquery_ui_base_url' ) ? FrmProAppHelper::jquery_ui_base_url() : '';
3824 + }
3825 +
3826 + /**
3827 + * @since 4.07
3828 + * @deprecated x.x
3829 + */
3830 + public static function renewal_message() {
3831 + _deprecated_function( __METHOD__, 'x.x', 'FrmProAddonsController::renewal_message' );
3988 3832 }
3989 3833 }