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 +243 -413 6.5.35.5.4 View file →
@@ -14,19 +14,12 @@
14 14 private static $added_gmt_offset_filter = false;
15 15
16 16 /**
17 17 * @since 2.0
18 - *
19 - * @var string
20 18 */
21 - public static $plug_version = '6.5.3';
19 + public static $plug_version = '5.5.4';
22 20
23 21 /**
24 - * @var bool
25 - */
26 - private static $included_svg = false;
27 -
28 - /**
29 22 * @since 1.07.02
30 23 *
31 24 * @param none
32 25 *
@@ -155,28 +148,12 @@
155 148
156 149 public static function get_menu_name() {
157 150 $frm_settings = self::get_settings();
158 151
159 - return FrmAddonsController::is_license_expired() ? 'Formidable' : $frm_settings->menu;
152 + return $frm_settings->menu;
160 153 }
161 154
162 155 /**
163 - * Determine if the current branding is set to 'formidable'.
164 - *
165 - * Checks the menu title, retrieved through get_menu_name,
166 - * and verifies if it matches the 'formidable' branding.
167 - *
168 - * @since 6.4.2
169 - *
170 - * @return bool True if the menu title is 'formidable', false otherwise.
171 - */
172 - public static function is_formidable_branding() {
173 - $menu_title = self::get_menu_name();
174 -
175 - return 'formidable' === strtolower( trim( $menu_title ) );
176 - }
177 -
178 - /**
179 156 * @since 3.05
180 157 */
181 158 public static function svg_logo( $atts = array() ) {
182 159 $defaults = array(
@@ -275,15 +252,15 @@
275 252 global $pagenow;
276 253 $get_page = self::simple_get( 'page', 'sanitize_title' );
277 254 if ( $pagenow ) {
278 255 // allow this to be true during ajax load i.e. ajax form builder loading
279 - $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;
280 257 if ( $is_page ) {
281 258 return true;
282 259 }
283 260 }
284 261
285 - return is_admin() && $get_page === $page;
262 + return is_admin() && $get_page == $page;
286 263 }
287 264
288 265 /**
289 266 * If the current page is for editing or creating a view.
@@ -355,18 +332,14 @@
355 332 * Check if on an admin page
356 333 *
357 334 * @since 2.0
358 335 *
336 + * @param None
337 + *
359 338 * @return boolean
360 339 */
361 340 public static function is_admin() {
362 - $is_admin = is_admin() && ! wp_doing_ajax();
363 -
364 - /**
365 - * @since 6.0
366 - * @param bool $is_admin
367 - */
368 - return apply_filters( 'frm_is_admin', $is_admin );
341 + return is_admin() && ! wp_doing_ajax();
369 342 }
370 343
371 344 /**
372 345 * Check if value contains blank value or empty array
@@ -399,37 +372,26 @@
399 372 return isset( $_SERVER[ $value ] ) ? wp_strip_all_tags( wp_unslash( $_SERVER[ $value ] ) ) : '';
400 373 }
401 374
402 375 /**
403 - * Get the server OS
376 + * Check for the IP address in several places
377 + * Used by [ip] shortcode
404 378 *
405 - * @since 6.4.2
406 - *
407 - * @return string
408 - */
409 - public static function get_server_os() {
410 - if ( function_exists( 'php_uname' ) ) {
411 - return php_uname( 's' );
412 - }
413 -
414 - if ( ! defined( 'PHP_OS' ) ) {
415 - return '';
416 - }
417 -
418 - // match the same response for Windows server as php_uname('s')
419 - return in_array( PHP_OS, array( 'WIN32', 'WINNT', 'Windows_NT' ), true ) ? 'Windows NT' : PHP_OS;
420 - }
421 -
422 - /**
423 - * Check for the IP address in several places (when custom headers are enabled).
424 - * Used by [ip] shortcode.
425 - *
426 379 * @return string The IP address of the current user
427 380 */
428 381 public static function get_ip_address() {
429 - $ip_options = self::should_use_custom_header_ip() ? self::get_custom_header_keys_for_ip() : array( 'REMOTE_ADDR' );
430 - $ip = '';
431 -
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 = '';
432 394 foreach ( $ip_options as $key ) {
433 395 if ( ! isset( $_SERVER[ $key ] ) ) {
434 396 continue;
435 397 }
@@ -435,9 +397,9 @@
435 397 }
436 398
437 399 $key = self::get_server_value( $key );
438 400 foreach ( explode( ',', $key ) as $ip ) {
439 - $ip = trim( $ip ); // Just to be safe.
401 + $ip = trim( $ip ); // just to be safe.
440 402
441 403 if ( filter_var( $ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE ) !== false ) {
442 404 return sanitize_text_field( $ip );
443 405 }
@@ -446,52 +408,8 @@
446 408
447 409 return sanitize_text_field( $ip );
448 410 }
449 411
450 - /**
451 - * @since 6.1
452 - *
453 - * @return array
454 - */
455 - public static function get_custom_header_keys_for_ip() {
456 - return array(
457 - 'HTTP_CLIENT_IP',
458 - 'HTTP_CF_CONNECTING_IP',
459 - 'HTTP_X_FORWARDED_FOR',
460 - 'HTTP_X_FORWARDED',
461 - 'HTTP_X_CLUSTER_CLIENT_IP',
462 - 'HTTP_X_REAL_IP',
463 - 'HTTP_FORWARDED_FOR',
464 - 'HTTP_FORWARDED',
465 - 'REMOTE_ADDR',
466 - );
467 - }
468 -
469 - /**
470 - * Check if we should check every HTTP header or just $_SERVER['REMOTE_ADDR'].
471 - * The other HTTP headers can be spoofed so this isn't recommended.
472 - * But in some cases (like reverse proxies), the IP may be empty if you use $_SERVER['REMOTE_ADDR'].
473 - *
474 - * @since 6.1
475 - *
476 - * @return bool
477 - */
478 - private static function should_use_custom_header_ip() {
479 - $settings = self::get_settings();
480 - $should_use_custom_header_ip = ! $settings->no_ips && $settings->custom_header_ip;
481 -
482 - /**
483 - * Filter whether to check spoofable HTTP headers.
484 - * This uses the custom_header_ip setting, but it is hidden if the GDPR option is also on.
485 - * 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.
486 - *
487 - * @since 6.1
488 - *
489 - * @param bool $should_use_custom_header_ip
490 - */
491 - return apply_filters( 'frm_use_custom_header_ip', $should_use_custom_header_ip );
492 - }
493 -
494 412 public static function get_param( $param, $default = '', $src = 'get', $sanitize = '' ) {
495 413 if ( strpos( $param, '[' ) ) {
496 414 $params = explode( '[', $param );
497 415 $param = $params[0];
@@ -580,14 +498,14 @@
580 498 );
581 499 $args = wp_parse_args( $args, $defaults );
582 500
583 501 $value = $args['default'];
584 - if ( $args['type'] === 'get' ) {
502 + if ( $args['type'] == 'get' ) {
585 503 if ( $_GET && isset( $_GET[ $args['param'] ] ) ) {
586 504 // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized, WordPress.Security.NonceVerification.Missing
587 505 $value = wp_unslash( $_GET[ $args['param'] ] );
588 506 }
589 - } elseif ( $args['type'] === 'post' ) {
507 + } elseif ( $args['type'] == 'post' ) {
590 508 if ( isset( $_POST[ $args['param'] ] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing
591 509 // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized, WordPress.Security.NonceVerification.Missing
592 510 $value = wp_unslash( $_POST[ $args['param'] ] );
593 511 if ( $args['serialized'] === true && is_serialized_string( $value ) && is_serialized( $value ) ) {
@@ -1008,18 +926,8 @@
1008 926
1009 927 $html_atts = self::array_to_html_params( $atts );
1010 928
1011 929 $icon = trim( str_replace( array( 'frm_icon_font', 'frmfont ' ), '', $class ) );
1012 -
1013 - // Replace icons that have been removed.
1014 - $deprecated = array(
1015 - 'frm_clone_solid_icon' => 'frm_clone_icon',
1016 - );
1017 - if ( isset( $deprecated[ $icon ] ) ) {
1018 - $icon = $deprecated[ $icon ];
1019 - $class = str_replace( $icon, $deprecated[ $icon ], $class );
1020 - }
1021 -
1022 930 if ( $icon === $class ) {
1023 931 $icon = '<i class="' . esc_attr( $class ) . '"' . $html_atts . '></i>';
1024 932 } else {
1025 933 $class = strpos( $icon, ' ' ) === false ? '' : ' ' . $icon;
@@ -1076,9 +984,9 @@
1076 984 * @param array $allowed_attr
1077 985 * @return array
1078 986 */
1079 987 public static function allow_vars_in_styles( $allowed_attr ) {
1080 - $allowed_attr[] = '--primary-700';
988 + $allowed_attr[] = '--primary-hover';
1081 989 return $allowed_attr;
1082 990 }
1083 991
1084 992 /**
@@ -1087,9 +995,9 @@
1087 995 * @param bool $allow_css
1088 996 * @param string $css_string
1089 997 */
1090 998 public static function allow_style( $allow_css, $css_string ) {
1091 - if ( ! $allow_css && 0 === strpos( $css_string, '--primary-700:' ) ) {
999 + if ( ! $allow_css && 0 === strpos( $css_string, '--primary-hover:' ) ) {
1092 1000 $split = explode( ':', $css_string, 2 );
1093 1001 $allow_css = 2 === count( $split ) && self::is_a_valid_color( $split[1] );
1094 1002 }
1095 1003 return $allow_css;
@@ -1116,18 +1024,11 @@
1116 1024 /**
1117 1025 * Include svg images.
1118 1026 *
1119 1027 * @since 4.0.02
1120 - * @return void
1121 1028 */
1122 1029 public static function include_svg() {
1123 - if ( self::$included_svg ) {
1124 - return;
1125 - }
1126 -
1127 - // Use readfile instead of include_once because of a default security rule in Snuffleupagus.
1128 - readfile( self::plugin_path() . '/images/icons.svg' );
1129 - self::$included_svg = true;
1030 + include_once self::plugin_path() . '/images/icons.svg';
1130 1031 }
1131 1032
1132 1033 /**
1133 1034 * Convert an associative array to HTML values.
@@ -1163,11 +1064,9 @@
1163 1064 if ( ! $echo ) {
1164 1065 ob_start();
1165 1066 }
1166 1067
1167 - if ( is_callable( $echo_function ) ) {
1168 - $echo_function();
1169 - }
1068 + $echo_function();
1170 1069
1171 1070 if ( ! $echo ) {
1172 1071 $return = ob_get_contents();
1173 1072 ob_end_clean();
@@ -1190,22 +1089,8 @@
1190 1089 include( self::plugin_path() . '/classes/views/shared/admin-header.php' );
1191 1090 }
1192 1091
1193 1092 /**
1194 - * @since 6.0
1195 - *
1196 - * @param string $type
1197 - * @return void
1198 - */
1199 - public static function import_link( $type = 'secondary' ) {
1200 - ?>
1201 - <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">
1202 - <?php esc_html_e( 'Import', 'formidable' ); ?>
1203 - </a>
1204 - <?php
1205 - }
1206 -
1207 - /**
1208 1093 * Print applicable admin banner.
1209 1094 *
1210 1095 * @since 5.4.2
1211 1096 *
@@ -1263,9 +1148,9 @@
1263 1148 return;
1264 1149 }
1265 1150
1266 1151 $href = ! empty( $atts['new_link'] ) ? esc_url( $atts['new_link'] ) : '#';
1267 - $class = 'button button-primary frm-button-primary';
1152 + $class = 'button button-primary frm-button-primary frm-with-plus';
1268 1153
1269 1154 if ( ! empty( $atts['trigger_new_form_modal'] ) ) {
1270 1155 $class .= ' frm-trigger-new-form-modal';
1271 1156 }
@@ -1335,14 +1220,11 @@
1335 1220 }
1336 1221 }
1337 1222
1338 1223 /**
1339 - * Save all front-end js scripts into a single file.
1340 - * And save an additional single file of all front-end Stripe JS scripts.
1224 + * Save all front-end js scripts into a single file
1341 1225 *
1342 1226 * @since 3.0
1343 - *
1344 - * @return void
1345 1227 */
1346 1228 public static function save_combined_js() {
1347 1229 $file_atts = apply_filters(
1348 1230 'frm_js_location',
@@ -1355,34 +1237,10 @@
1355 1237
1356 1238 $files = array(
1357 1239 self::plugin_path() . '/js/formidable.min.js',
1358 1240 );
1359 - /**
1360 - * @param array $files
1361 - */
1362 1241 $files = apply_filters( 'frm_combined_js_files', $files );
1363 1242 $new_file->combine_files( $files );
1364 -
1365 - // Create the minified Stripe Script.
1366 - $file_atts = apply_filters(
1367 - 'frm_stripe_js_location',
1368 - array(
1369 - 'file_name' => 'frmstrp.min.js',
1370 - 'new_file_path' => self::plugin_path() . '/js',
1371 - )
1372 - );
1373 - $new_file = new FrmCreateFile( $file_atts );
1374 - $files = array(
1375 - FrmStrpLiteAppHelper::plugin_path() . 'js/frmstrp.min.js',
1376 - );
1377 -
1378 - /**
1379 - * @since 6.5
1380 - *
1381 - * @param array $files
1382 - */
1383 - $files = apply_filters( 'frm_stripe_combined_js_files', $files );
1384 - $new_file->combine_files( $files );
1385 1243 }
1386 1244
1387 1245 /**
1388 1246 * Check a value from a shortcode to see if true or false.
@@ -1564,37 +1422,18 @@
1564 1422 self::is_full_screen_view_builder_page();
1565 1423 }
1566 1424
1567 1425 /**
1568 - * 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.
1569 1427 * The first URL is a submenu "Styles" in the Formidable menu /wp-admin/admin.php?page=formidable-styles.
1570 1428 * The alternative URL is linked as a submenu "Forms" item of the Appearance menu /wp-admin/themes.php?page=formidable-styles2.
1571 1429 *
1572 1430 * @since 5.5.3
1573 - * @since 6.0 Added the $view parameter. Previously there was only a 'edit' view.
1574 1431 *
1575 - * @param string $view Supports 'edit', 'list', and ''. If '', both 'edit' and 'list' will match.
1576 1432 * @return bool
1577 1433 */
1578 - public static function is_style_editor_page( $view = '' ) {
1579 - if ( ! self::is_admin_page( 'formidable-styles' ) && ! self::is_admin_page( 'formidable-styles2' ) ) {
1580 - return false;
1581 - }
1582 -
1583 - if ( ! in_array( $view, array( 'list', 'edit' ), true ) ) {
1584 - return true;
1585 - }
1586 -
1587 - $action = self::simple_get( 'frm_action' );
1588 - $is_edit_mode = 'edit' === $action || ( ! $action && ! self::simple_get( 'id' ) && ! self::simple_get( 'form' ) );
1589 -
1590 - if ( ! $is_edit_mode && class_exists( 'FrmProStylesController' ) && in_array( $action, array( 'new_style', 'duplicate' ), true ) ) {
1591 - $is_edit_mode = true;
1592 - }
1593 -
1594 - $checking_for_edit_mode = 'edit' === $view;
1595 -
1596 - 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' );
1597 1436 }
1598 1437
1599 1438 /**
1600 1439 * @since 5.5.3
@@ -1915,9 +1754,9 @@
1915 1754 foreach ( $array as $key => $value ) {
1916 1755 if ( is_array( $value ) ) {
1917 1756 $return = array_merge( $return, self::array_flatten( $value, $keys ) );
1918 1757 } else {
1919 - if ( $keys === 'keep' ) {
1758 + if ( $keys == 'keep' ) {
1920 1759 $return[ $key ] = $value;
1921 1760 } else {
1922 1761 $return[] = $value;
1923 1762 }
@@ -2001,9 +1840,9 @@
2001 1840 return $user_id;
2002 1841 }
2003 1842
2004 1843 $user_id = sanitize_text_field( $user_id );
2005 - if ( $user_id === 'current' ) {
1844 + if ( $user_id == 'current' ) {
2006 1845 $user_id = get_current_user_id();
2007 1846 } else {
2008 1847 if ( is_email( $user_id ) ) {
2009 1848 $user = get_user_by( 'email', $user_id );
@@ -2471,9 +2310,9 @@
2471 2310 *
2472 2311 * @return string $time_ago
2473 2312 */
2474 2313 public static function human_time_diff( $from, $to = '', $levels = 1 ) {
2475 - if ( empty( $to ) && 0 !== $to ) {
2314 + if ( empty( $to ) ) {
2476 2315 $now = new DateTime();
2477 2316 } else {
2478 2317 $now = new DateTime( '@' . $to );
2479 2318 }
@@ -2724,9 +2563,8 @@
2724 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' ),
2725 2564 'from' => __( 'Enter the name and/or email address of the sender. FORMAT: John Bates <john@example.com> or john@example.com.', 'formidable' ),
2726 2565 /* translators: %1$s: Form name, %2$s: Date */
2727 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() ) ),
2728 - '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' ),
2729 2567 );
2730 2568
2731 2569 if ( ! isset( $tooltips[ $name ] ) ) {
2732 2570 return;
@@ -2815,15 +2653,12 @@
2815 2653 }
2816 2654 }
2817 2655
2818 2656 /**
2819 - * 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
2820 2658 * all data to json.
2821 2659 *
2822 2660 * @since 4.02.03
2823 - *
2824 - * @param array|string $value
2825 - * @return void
2826 2661 */
2827 2662 public static function unserialize_or_decode( &$value ) {
2828 2663 if ( is_array( $value ) ) {
2829 2664 return;
@@ -2829,9 +2664,9 @@
2829 2664 return;
2830 2665 }
2831 2666
2832 2667 if ( is_serialized( $value ) ) {
2833 - $value = self::maybe_unserialize_array( $value );
2668 + $value = maybe_unserialize( $value );
2834 2669 } else {
2835 2670 $value = self::maybe_json_decode( $value, false );
2836 2671 }
2837 2672 }
@@ -2836,35 +2671,8 @@
2836 2671 }
2837 2672 }
2838 2673
2839 2674 /**
2840 - * Safely unserialize an array if necessary.
2841 - * This function doesn't actually use unserialize. The string is parsed instead.
2842 - *
2843 - * @since 6.2
2844 - *
2845 - * @param mixed $value
2846 - * @return mixed
2847 - */
2848 - public static function maybe_unserialize_array( $value ) {
2849 - if ( ! is_string( $value ) ) {
2850 - return $value;
2851 - }
2852 -
2853 - // Since we only expect an array, skip anything that doesn't start with a:.
2854 - if ( ! is_serialized( $value ) || 'a:' !== substr( $value, 0, 2 ) ) {
2855 - return $value;
2856 - }
2857 -
2858 - $parsed = FrmSerializedStringParserHelper::get()->parse( $value );
2859 - if ( is_array( $parsed ) ) {
2860 - $value = $parsed;
2861 - }
2862 -
2863 - return $value;
2864 - }
2865 -
2866 - /**
2867 2675 * Decode a JSON string.
2868 2676 * Do not switch shortcodes like [24] to array unless intentional ie XML values.
2869 2677 *
2870 2678 * @param mixed $string
@@ -2891,36 +2699,8 @@
2891 2699 return $string;
2892 2700 }
2893 2701
2894 2702 /**
2895 - * @since 6.2.3
2896 - *
2897 - * @param string $value
2898 - * @return string
2899 - */
2900 - public static function maybe_utf8_encode( $value ) {
2901 - $from_format = 'ISO-8859-1';
2902 - $to_format = 'UTF-8';
2903 -
2904 - if ( function_exists( 'mb_check_encoding' ) && function_exists( 'mb_convert_encoding' ) ) {
2905 - if ( mb_check_encoding( $value, $from_format ) ) {
2906 - return mb_convert_encoding( $value, $to_format, $from_format );
2907 - }
2908 - return $value;
2909 - }
2910 -
2911 - if ( function_exists( 'iconv' ) ) {
2912 - $converted = iconv( $from_format, $to_format, $value );
2913 - // Value is false if $value is not ISO-8859-1.
2914 - if ( false !== $converted ) {
2915 - return $converted;
2916 - }
2917 - }
2918 -
2919 - return $value;
2920 - }
2921 -
2922 - /**
2923 2703 * Reformat the json serialized array in name => value array.
2924 2704 *
2925 2705 * @since 4.02.03
2926 2706 */
@@ -3016,10 +2796,13 @@
3016 2796 */
3017 2797 public static function localize_script( $location ) {
3018 2798 global $wp_scripts;
3019 2799
2800 + $ajax_url = admin_url( 'admin-ajax.php', is_ssl() ? 'admin' : 'http' );
2801 + $ajax_url = apply_filters( 'frm_ajax_url', $ajax_url );
2802 +
3020 2803 $script_strings = array(
3021 - 'ajax_url' => esc_url_raw( self::get_ajax_url() ),
2804 + 'ajax_url' => $ajax_url,
3022 2805 'images_url' => self::plugin_url() . '/images',
3023 2806 'loading' => __( 'Loading&hellip;', 'formidable' ),
3024 2807 'remove' => __( 'Remove', 'formidable' ),
3025 2808 'offset' => apply_filters( 'frm_scroll_offset', 4 ),
@@ -3033,72 +2816,70 @@
3033 2816 'include_alert_role' => self::should_include_alert_role_on_field_errors(),
3034 2817 );
3035 2818
3036 2819 $data = $wp_scripts->get_data( 'formidable', 'data' );
3037 - if ( ! $data ) {
2820 + if ( empty( $data ) ) {
3038 2821 wp_localize_script( 'formidable', 'frm_js', $script_strings );
3039 2822 }
3040 2823
3041 - if ( $location === 'admin' ) {
2824 + if ( $location == 'admin' ) {
3042 2825 $frm_settings = self::get_settings();
3043 2826 $admin_script_strings = array(
3044 - 'desc' => __( '(Click to add description)', 'formidable' ),
3045 - 'blank' => __( '(Blank)', 'formidable' ),
3046 - 'no_label' => __( '(no label)', 'formidable' ),
3047 - 'ok' => __( 'OK', 'formidable' ),
3048 - 'cancel' => __( 'Cancel', 'formidable' ),
3049 - 'default_label' => __( 'Default', 'formidable' ),
3050 - 'clear_default' => __( 'Clear default value when typing', 'formidable' ),
3051 - 'no_clear_default' => __( 'Do not clear default value when typing', 'formidable' ),
3052 - 'valid_default' => __( 'Default value will pass form validation', 'formidable' ),
3053 - 'no_valid_default' => __( 'Default value will NOT pass form validation', 'formidable' ),
3054 - 'confirm' => __( 'Are you sure?', 'formidable' ),
3055 - 'conf_delete' => __( 'Are you sure you want to delete this field and all data associated with it?', 'formidable' ),
3056 - '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' ),
3057 - 'conf_no_repeat' => __( 'Warning: If you have entries with multiple rows, all but the first row will be lost.', 'formidable' ),
3058 - 'default_unique' => $frm_settings->unique_msg,
3059 - 'default_conf' => __( 'The entered values do not match', 'formidable' ),
3060 - 'enter_email' => __( 'Enter Email', 'formidable' ),
3061 - 'confirm_email' => __( 'Confirm Email', 'formidable' ),
3062 - 'conditional_text' => __( 'Conditional content here', 'formidable' ),
3063 - 'new_option' => __( 'New Option', 'formidable' ),
3064 - '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' ),
3065 - 'enter_password' => __( 'Enter Password', 'formidable' ),
3066 - 'confirm_password' => __( 'Confirm Password', 'formidable' ),
3067 - 'import_complete' => __( 'Import Complete', 'formidable' ),
3068 - 'updating' => __( 'Please wait while your site updates.', 'formidable' ),
3069 - 'no_save_warning' => __( 'Warning: There is no way to retrieve unsaved entries.', 'formidable' ),
3070 - 'private_label' => __( 'Private', 'formidable' ),
3071 - 'jquery_ui_url' => '',
3072 - 'pro_url' => is_callable( 'FrmProAppHelper::plugin_url' ) ? FrmProAppHelper::plugin_url() : '',
3073 - 'no_licenses' => __( 'No new licenses were found', 'formidable' ),
3074 - 'unmatched_parens' => __( 'This calculation has at least one unmatched ( ) { } [ ].', 'formidable' ),
3075 - 'view_shortcodes' => __( 'This calculation may have shortcodes that work in Views but not forms.', 'formidable' ),
3076 - 'text_shortcodes' => __( 'This calculation may have shortcodes that work in text calculations but not numeric calculations.', 'formidable' ),
3077 - 'only_one_action' => __( 'This form action is limited to one per form. Please edit the existing form action.', 'formidable' ),
3078 - '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(),
3079 2865 /* Translators: %s is the name of a Detail Page Slug that is a reserved word.*/
3080 - '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' ), '****' ),
3081 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. */
3082 - 'param_is_reserved' => sprintf( __( 'The parameter "%s" is reserved by WordPress. This may cause problems when included in the URL. Is this intentional? ', 'formidable' ), '****' ),
3083 - 'reserved_words' => __( 'See the list of reserved words in WordPress.', 'formidable' ),
3084 - 'repeat_limit_min' => __( 'Please enter a Repeat Limit that is greater than 1.', 'formidable' ),
3085 - 'checkbox_limit' => __( 'Please select a limit between 0 and 200.', 'formidable' ),
3086 - 'install' => __( 'Install', 'formidable' ),
3087 - 'active' => __( 'Active', 'formidable' ),
3088 - 'select_a_field' => __( 'Select a Field', 'formidable' ),
3089 - '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' ),
3090 2876 'field_already_used' => __( 'Oops. You have already used that field.', 'formidable' ),
3091 - 'saving' => '', // Deprecated in 6.0.
3092 - 'saved' => '', // Deprecated in 6.0.
3093 2877 );
3094 - /**
3095 - * @param array $admin_script_strings
3096 - */
3097 2878 $admin_script_strings = apply_filters( 'frm_admin_script_strings', $admin_script_strings );
3098 2879
3099 2880 $data = $wp_scripts->get_data( 'formidable_admin', 'data' );
3100 - if ( ! $data ) {
2881 + if ( empty( $data ) ) {
3101 2882 wp_localize_script( 'formidable_admin', 'frm_admin_js', $admin_script_strings );
3102 2883 }
3103 2884 }
3104 2885 }
@@ -3103,24 +2884,8 @@
3103 2884 }
3104 2885 }
3105 2886
3106 2887 /**
3107 - * @since 6.5
3108 - *
3109 - * @return string
3110 - */
3111 - public static function get_ajax_url() {
3112 - $ajax_url = admin_url( 'admin-ajax.php', is_ssl() ? 'admin' : 'http' );
3113 -
3114 - /**
3115 - * @since 2.0.13
3116 - *
3117 - * @param string $ajax_url
3118 - */
3119 - return apply_filters( 'frm_ajax_url', $ajax_url );
3120 - }
3121 -
3122 - /**
3123 2888 * Returns whether or not the first errored input should be auto-focused (default true).
3124 2889 *
3125 2890 * @since 5.2.05
3126 2891 *
@@ -3848,40 +3613,8 @@
3848 3613 return get_plugins();
3849 3614 }
3850 3615
3851 3616 /**
3852 - * 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.
3853 - * This is to make sure that the URL can't be exploited for a SSRF attack.
3854 - *
3855 - * @since 5.5.5
3856 - *
3857 - * @param string $url
3858 - * @param string $expected_extension
3859 - * @return bool
3860 - */
3861 - public static function validate_url_is_in_s3_bucket( $url, $expected_extension ) {
3862 - $file_is_in_expected_s3_bucket = 0 === strpos( $url, 'https://s3.amazonaws.com/fp.strategy11.com' );
3863 - if ( ! $file_is_in_expected_s3_bucket ) {
3864 - return false;
3865 - }
3866 -
3867 - $parsed = parse_url( $url );
3868 - if ( ! is_array( $parsed ) ) {
3869 - // URL is malformed.
3870 - return false;
3871 - }
3872 -
3873 - $path = $parsed['path'];
3874 - $ext = pathinfo( $path, PATHINFO_EXTENSION );
3875 - if ( $expected_extension !== $ext ) {
3876 - // The URL isn't to an XML file.
3877 - return false;
3878 - }
3879 -
3880 - return true;
3881 - }
3882 -
3883 - /**
3884 3617 * @since 4.08
3885 3618 * @deprecated 4.09.01
3886 3619 */
3887 3620 public static function expiring_message() {
@@ -3910,8 +3643,18 @@
3910 3643 FrmFormsHelper::insert_opt_html( $args );
3911 3644 }
3912 3645
3913 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 + /**
3914 3657 * @deprecated 3.01
3915 3658 * @codeCoverageIgnore
3916 3659 */
3917 3660 public static function sanitize_array( &$values ) {
@@ -3918,86 +3661,173 @@
3918 3661 FrmDeprecated::sanitize_array( $values );
3919 3662 }
3920 3663
3921 3664 /**
3922 - * @since 2.0
3923 - * @deprecated 5.0.13
3665 + * @param array $settings
3666 + * @param string $group
3924 3667 *
3925 - * @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
3926 3671 */
3927 - public static function jquery_ui_base_url() {
3928 - _deprecated_function( __FUNCTION__, '5.0.13', 'FrmProAppHelper::jquery_ui_base_url' );
3929 - 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 );
3930 3674 }
3931 3675
3932 3676 /**
3933 - * @since 4.07
3934 - * @deprecated 6.0
3677 + * @since 2.0.4
3678 + * @deprecated 2.05.06
3679 + * @codeCoverageIgnore
3935 3680 */
3936 - public static function renewal_message() {
3937 - _deprecated_function( __METHOD__, '6.0', 'FrmProAddonsController::renewal_message' );
3681 + public static function save_json_post( $settings ) {
3682 + return FrmDeprecated::save_json_post( $settings );
3938 3683 }
3939 3684
3940 3685 /**
3941 - * Display a dismissable warning message and save its dismissal state.
3686 + * @since 2.0
3687 + * @deprecated 2.05.06
3688 + * @codeCoverageIgnore
3942 3689 *
3943 - * @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
3944 3694 *
3945 - * @param string $message The warning message to display.
3946 - * @param string $option The unique identifier for the dismissal state of the message and the WP Ajax action.
3947 - * @return void
3695 + * @return mixed $results The cache or query results
3948 3696 */
3949 - public static function add_dismissable_warning_message( $message = '', $option = '' ) {
3950 - if ( ! $message || ! $option ) {
3951 - return;
3952 - }
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 + }
3953 3700
3954 - $ajax_callback = function() use ( $option ) {
3955 - self::dismiss_warning_message( $option );
3956 - };
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 + }
3957 3708
3958 - // We're handling JS codes with `doJsonPost` and it adds 'frm_' to the beginning of the action.
3959 - // To prevent any issues, we add 'frm_' from the beginning of the action.
3960 - 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 + }
3961 3716
3962 - add_filter(
3963 - 'frm_message_list',
3964 - function( $show_messages ) use ( $message, $option ) {
3965 - if ( get_option( $option, false ) ) {
3966 - return $show_messages;
3967 - }
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 + }
3968 3724
3969 - $dismiss_icon = self::icon_by_class(
3970 - 'frmfont frm_close_icon',
3971 - array(
3972 - 'aria-label' => _x( 'Dismiss', 'warning message: close icon label', 'formidable' ),
3973 - 'echo' => false,
3974 - )
3975 - );
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 + }
3976 3734
3977 - $show_messages[] = $message;
3978 - $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 + }
3979 3745
3980 - return $show_messages;
3981 - }
3982 - );
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 );
3983 3755 }
3984 3756
3985 3757 /**
3986 - * Dismiss a warning message and update the dismissal state.
3758 + * @since 1.07.10
3759 + * @deprecated 2.05.06
3760 + * @codeCoverageIgnore
3987 3761 *
3988 - * @since 6.3
3762 + * @param string $term The value to escape
3989 3763 *
3990 - * @param string $option The unique identifier for the dismissal state of the message.
3991 - * @return void
3764 + * @return string The escaped value
3992 3765 */
3993 - public static function dismiss_warning_message( $option = '' ) {
3994 - self::permission_check( 'frm_change_settings' );
3995 - check_ajax_referer( 'frm_ajax', 'nonce' );
3766 + public static function esc_like( $term ) {
3767 + return FrmDeprecated::esc_like( $term );
3768 + }
3996 3769
3997 - if ( $option ) {
3998 - update_option( $option, true, 'no' );
3999 - }
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 + }
4000 3779
4001 - 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' );
4002 3832 }
4003 3833 }