PluginProbe
Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More / 5.3.1
Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More v5.3.1
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 +276 -529 6.5.15.3.1 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.3.1';
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,58 +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 - * Print applicable admin banner.
1195 - *
1196 - * @since 5.4.2
1197 - *
1198 - * @param bool $should_show_lite_upgrade
1199 - * @return void
1200 - */
1201 - public static function print_admin_banner( $should_show_lite_upgrade ) {
1202 - if ( ! current_user_can( 'administrator' ) ) {
1203 - FrmInbox::maybe_show_banner();
1204 - return;
1205 - }
1206 -
1207 - if ( self::maybe_show_license_warning() || FrmInbox::maybe_show_banner() || ! $should_show_lite_upgrade || self::pro_is_installed() ) {
1208 - // Print license warning or inbox banner and exit if either prints.
1209 - // And exit before printing the upgrade bar if it shouldn't be shown.
1210 - return;
1211 - }
1212 - ?>
1213 - <div class="frm-upgrade-bar">
1214 - <span>You're using Formidable Forms Lite. To unlock more features consider</span>
1215 - <a href="<?php echo esc_url( self::admin_upgrade_link( 'top-bar' ) ); ?>" target="_blank" rel="noopener">upgrading to Pro</a>.
1216 - </div>
1217 - <?php
1218 - }
1219 -
1220 - /**
1221 - * @since 5.4.2
1222 - *
1223 - * @return bool True if a banner is available and shown.
1224 - */
1225 - private static function maybe_show_license_warning() {
1226 - return is_callable( 'FrmProAddonsController::admin_banner' ) && FrmProAddonsController::admin_banner();
1227 - }
1228 -
1229 - /**
1230 1093 * Render a button for a new item (Form, Application, etc).
1231 1094 *
1232 1095 * @since 3.0
1233 1096 * @param array $atts {
@@ -1249,9 +1112,9 @@
1249 1112 return;
1250 1113 }
1251 1114
1252 1115 $href = ! empty( $atts['new_link'] ) ? esc_url( $atts['new_link'] ) : '#';
1253 - $class = 'button button-primary frm-button-primary';
1116 + $class = 'button button-primary frm-button-primary frm-with-plus';
1254 1117
1255 1118 if ( ! empty( $atts['trigger_new_form_modal'] ) ) {
1256 1119 $class .= ' frm-trigger-new-form-modal';
1257 1120 }
@@ -1321,14 +1184,11 @@
1321 1184 }
1322 1185 }
1323 1186
1324 1187 /**
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.
1188 + * Save all front-end js scripts into a single file
1327 1189 *
1328 1190 * @since 3.0
1329 - *
1330 - * @return void
1331 1191 */
1332 1192 public static function save_combined_js() {
1333 1193 $file_atts = apply_filters(
1334 1194 'frm_js_location',
@@ -1341,34 +1201,10 @@
1341 1201
1342 1202 $files = array(
1343 1203 self::plugin_path() . '/js/formidable.min.js',
1344 1204 );
1345 - /**
1346 - * @param array $files
1347 - */
1348 1205 $files = apply_filters( 'frm_combined_js_files', $files );
1349 1206 $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 1207 }
1372 1208
1373 1209 /**
1374 1210 * Check a value from a shortcode to see if true or false.
@@ -1529,8 +1365,9 @@
1529 1365 public static function post_edit_link( $post_id ) {
1530 1366 $post = get_post( $post_id );
1531 1367 if ( $post ) {
1532 1368 $post_url = admin_url( 'post.php?post=' . $post_id . '&action=edit' );
1369 + $post_url = self::maybe_full_screen_link( $post_url );
1533 1370
1534 1371 return '<a href="' . esc_url( $post_url ) . '">' . self::truncate( $post->post_title, 50 ) . '</a>';
1535 1372 }
1536 1373
@@ -1545,59 +1382,22 @@
1545 1382 * @return bool
1546 1383 */
1547 1384 public static function is_full_screen() {
1548 1385 return self::is_form_builder_page() ||
1549 - self::is_style_editor_page() ||
1550 - self::is_full_screen_view_builder_page();
1386 + self::is_admin_page( 'formidable-styles' ) ||
1387 + self::is_admin_page( 'formidable-styles2' ) ||
1388 + self::simple_get( 'frm-full', 'absint' ) ||
1389 + self::is_view_builder_page();
1551 1390 }
1552 1391
1553 1392 /**
1554 - * Check if user is on the style editor or its alternative URL.
1555 - * The first URL is a submenu "Styles" in the Formidable menu /wp-admin/admin.php?page=formidable-styles.
1556 - * The alternative URL is linked as a submenu "Forms" item of the Appearance menu /wp-admin/themes.php?page=formidable-styles2.
1557 - *
1558 - * @since 5.5.3
1559 - * @since 6.0 Added the $view parameter. Previously there was only a 'edit' view.
1560 - *
1561 - * @param string $view Supports 'edit', 'list', and ''. If '', both 'edit' and 'list' will match.
1562 - * @return bool
1563 - */
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;
1583 - }
1584 -
1585 - /**
1586 - * @since 5.5.3
1587 - *
1588 - * @return bool
1589 - */
1590 - private static function is_full_screen_view_builder_page() {
1591 - return self::is_admin_page( 'formidable-views-editor' );
1592 - }
1593 -
1594 - /**
1595 1393 * @since 4.0
1596 - * @deprecated 5.5.3
1597 1394 */
1598 1395 public static function maybe_full_screen_link( $link ) {
1599 - _deprecated_function( __METHOD__, '5.5.3' );
1396 + $is_full = self::simple_get( 'frm-full', 'absint' );
1397 + if ( $is_full && ! empty( $link ) && $link !== '#' ) {
1398 + $link .= '&frm-full=1';
1399 + }
1600 1400 return $link;
1601 1401 }
1602 1402
1603 1403 /**
@@ -1901,9 +1701,9 @@
1901 1701 foreach ( $array as $key => $value ) {
1902 1702 if ( is_array( $value ) ) {
1903 1703 $return = array_merge( $return, self::array_flatten( $value, $keys ) );
1904 1704 } else {
1905 - if ( $keys === 'keep' ) {
1705 + if ( $keys == 'keep' ) {
1906 1706 $return[ $key ] = $value;
1907 1707 } else {
1908 1708 $return[] = $value;
1909 1709 }
@@ -1987,9 +1787,9 @@
1987 1787 return $user_id;
1988 1788 }
1989 1789
1990 1790 $user_id = sanitize_text_field( $user_id );
1991 - if ( $user_id === 'current' ) {
1791 + if ( $user_id == 'current' ) {
1992 1792 $user_id = get_current_user_id();
1993 1793 } else {
1994 1794 if ( is_email( $user_id ) ) {
1995 1795 $user = get_user_by( 'email', $user_id );
@@ -2457,9 +2257,9 @@
2457 2257 *
2458 2258 * @return string $time_ago
2459 2259 */
2460 2260 public static function human_time_diff( $from, $to = '', $levels = 1 ) {
2461 - if ( empty( $to ) && 0 !== $to ) {
2261 + if ( empty( $to ) ) {
2462 2262 $now = new DateTime();
2463 2263 } else {
2464 2264 $now = new DateTime( '@' . $to );
2465 2265 }
@@ -2710,9 +2510,8 @@
2710 2510 '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 2511 'from' => __( 'Enter the name and/or email address of the sender. FORMAT: John Bates <john@example.com> or john@example.com.', 'formidable' ),
2712 2512 /* translators: %1$s: Form name, %2$s: Date */
2713 2513 '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 2514 );
2716 2515
2717 2516 if ( ! isset( $tooltips[ $name ] ) ) {
2718 2517 return;
@@ -2739,12 +2538,8 @@
2739 2538 return;
2740 2539 }
2741 2540
2742 2541 $frm_action = self::simple_get( 'frm_action', 'sanitize_title' );
2743 - if ( 'lite-reports' === $frm_action ) {
2744 - $frm_action = 'reports';
2745 - }
2746 -
2747 2542 if ( empty( $action ) || ( ! empty( $frm_action ) && in_array( $frm_action, $action ) ) ) {
2748 2543 echo ' class="current_page"';
2749 2544 }
2750 2545 }
@@ -2801,15 +2596,12 @@
2801 2596 }
2802 2597 }
2803 2598
2804 2599 /**
2805 - * Check for either json or serialized data. This is temporary while transitioning
2600 + * Check for either json or serilized data. This is temporary while transitioning
2806 2601 * all data to json.
2807 2602 *
2808 2603 * @since 4.02.03
2809 - *
2810 - * @param array|string $value
2811 - * @return void
2812 2604 */
2813 2605 public static function unserialize_or_decode( &$value ) {
2814 2606 if ( is_array( $value ) ) {
2815 2607 return;
@@ -2815,9 +2607,9 @@
2815 2607 return;
2816 2608 }
2817 2609
2818 2610 if ( is_serialized( $value ) ) {
2819 - $value = self::maybe_unserialize_array( $value );
2611 + $value = maybe_unserialize( $value );
2820 2612 } else {
2821 2613 $value = self::maybe_json_decode( $value, false );
2822 2614 }
2823 2615 }
@@ -2822,35 +2614,8 @@
2822 2614 }
2823 2615 }
2824 2616
2825 2617 /**
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 2618 * Decode a JSON string.
2854 2619 * Do not switch shortcodes like [24] to array unless intentional ie XML values.
2855 2620 *
2856 2621 * @param mixed $string
@@ -2877,36 +2642,8 @@
2877 2642 return $string;
2878 2643 }
2879 2644
2880 2645 /**
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 2646 * Reformat the json serialized array in name => value array.
2910 2647 *
2911 2648 * @since 4.02.03
2912 2649 */
@@ -2980,9 +2717,8 @@
2980 2717 'applicationsUrl' => admin_url( 'admin.php?page=formidable-applications' ),
2981 2718 'canAccessApplicationDashboard' => current_user_can( is_callable( 'FrmProApplicationsHelper::get_required_templates_capability' ) ? FrmProApplicationsHelper::get_required_templates_capability() : 'frm_edit_forms' ),
2982 2719 'loading' => __( 'Loading&hellip;', 'formidable' ),
2983 2720 'nonce' => wp_create_nonce( 'frm_ajax' ),
2984 - 'proIncludesSliderJs' => is_callable( 'FrmProFormsHelper::prepare_custom_currency' ),
2985 2721 );
2986 2722 wp_localize_script( 'formidable_admin_global', 'frmGlobal', $global_strings );
2987 2723
2988 2724 if ( $load ) {
@@ -3002,10 +2738,13 @@
3002 2738 */
3003 2739 public static function localize_script( $location ) {
3004 2740 global $wp_scripts;
3005 2741
2742 + $ajax_url = admin_url( 'admin-ajax.php', is_ssl() ? 'admin' : 'http' );
2743 + $ajax_url = apply_filters( 'frm_ajax_url', $ajax_url );
2744 +
3006 2745 $script_strings = array(
3007 - 'ajax_url' => esc_url_raw( self::get_ajax_url() ),
2746 + 'ajax_url' => $ajax_url,
3008 2747 'images_url' => self::plugin_url() . '/images',
3009 2748 'loading' => __( 'Loading&hellip;', 'formidable' ),
3010 2749 'remove' => __( 'Remove', 'formidable' ),
3011 2750 'offset' => apply_filters( 'frm_scroll_offset', 4 ),
@@ -3019,72 +2758,69 @@
3019 2758 'include_alert_role' => self::should_include_alert_role_on_field_errors(),
3020 2759 );
3021 2760
3022 2761 $data = $wp_scripts->get_data( 'formidable', 'data' );
3023 - if ( ! $data ) {
2762 + if ( empty( $data ) ) {
3024 2763 wp_localize_script( 'formidable', 'frm_js', $script_strings );
3025 2764 }
3026 2765
3027 - if ( $location === 'admin' ) {
2766 + if ( $location == 'admin' ) {
3028 2767 $frm_settings = self::get_settings();
3029 2768 $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(),
2769 + 'desc' => __( '(Click to add description)', 'formidable' ),
2770 + 'blank' => __( '(Blank)', 'formidable' ),
2771 + 'no_label' => __( '(no label)', 'formidable' ),
2772 + 'saving' => esc_attr( __( 'Saving', 'formidable' ) ),
2773 + 'saved' => esc_attr( __( 'Saved', 'formidable' ) ),
2774 + 'ok' => __( 'OK', 'formidable' ),
2775 + 'cancel' => __( 'Cancel', 'formidable' ),
2776 + 'default_label' => __( 'Default', 'formidable' ),
2777 + 'clear_default' => __( 'Clear default value when typing', 'formidable' ),
2778 + 'no_clear_default' => __( 'Do not clear default value when typing', 'formidable' ),
2779 + 'valid_default' => __( 'Default value will pass form validation', 'formidable' ),
2780 + 'no_valid_default' => __( 'Default value will NOT pass form validation', 'formidable' ),
2781 + 'caution' => __( 'Heads up', 'formidable' ),
2782 + 'confirm' => __( 'Are you sure?', 'formidable' ),
2783 + 'conf_delete' => __( 'Are you sure you want to delete this field and all data associated with it?', 'formidable' ),
2784 + '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' ),
2785 + 'conf_no_repeat' => __( 'Warning: If you have entries with multiple rows, all but the first row will be lost.', 'formidable' ),
2786 + 'default_unique' => $frm_settings->unique_msg,
2787 + 'default_conf' => __( 'The entered values do not match', 'formidable' ),
2788 + 'enter_email' => __( 'Enter Email', 'formidable' ),
2789 + 'confirm_email' => __( 'Confirm Email', 'formidable' ),
2790 + 'conditional_text' => __( 'Conditional content here', 'formidable' ),
2791 + 'new_option' => __( 'New Option', 'formidable' ),
2792 + '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' ),
2793 + 'enter_password' => __( 'Enter Password', 'formidable' ),
2794 + 'confirm_password' => __( 'Confirm Password', 'formidable' ),
2795 + 'import_complete' => __( 'Import Complete', 'formidable' ),
2796 + 'updating' => __( 'Please wait while your site updates.', 'formidable' ),
2797 + 'no_save_warning' => __( 'Warning: There is no way to retrieve unsaved entries.', 'formidable' ),
2798 + 'private_label' => __( 'Private', 'formidable' ),
2799 + 'jquery_ui_url' => '',
2800 + 'pro_url' => is_callable( 'FrmProAppHelper::plugin_url' ) ? FrmProAppHelper::plugin_url() : '',
2801 + 'no_licenses' => __( 'No new licenses were found', 'formidable' ),
2802 + 'unmatched_parens' => __( 'This calculation has at least one unmatched ( ) { } [ ].', 'formidable' ),
2803 + 'view_shortcodes' => __( 'This calculation may have shortcodes that work in Views but not forms.', 'formidable' ),
2804 + 'text_shortcodes' => __( 'This calculation may have shortcodes that work in text calculations but not numeric calculations.', 'formidable' ),
2805 + 'only_one_action' => __( 'This form action is limited to one per form. Please edit the existing form action.', 'formidable' ),
2806 + 'unsafe_params' => FrmFormsHelper::reserved_words(),
3065 2807 /* 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' ), '****' ),
2808 + 'slug_is_reserved' => sprintf( __( 'The Detail Page Slug "%s" is reserved by WordPress. This may cause problems. Is this intentional?', 'formidable' ), '****' ),
3067 2809 /* 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' ),
3076 - 'field_already_used' => __( 'Oops. You have already used that field.', 'formidable' ),
3077 - 'saving' => '', // Deprecated in 6.0.
3078 - 'saved' => '', // Deprecated in 6.0.
2810 + 'param_is_reserved' => sprintf( __( 'The parameter "%s" is reserved by WordPress. This may cause problems when included in the URL. Is this intentional? ', 'formidable' ), '****' ),
2811 + 'reserved_words' => __( 'See the list of reserved words in WordPress.', 'formidable' ),
2812 + 'repeat_limit_min' => __( 'Please enter a Repeat Limit that is greater than 1.', 'formidable' ),
2813 + 'checkbox_limit' => __( 'Please select a limit between 0 and 200.', 'formidable' ),
2814 + 'install' => __( 'Install', 'formidable' ),
2815 + 'active' => __( 'Active', 'formidable' ),
2816 + 'select_a_field' => __( 'Select a Field', 'formidable' ),
2817 + 'no_items_found' => __( 'No items found.', 'formidable' ),
3079 2818 );
3080 - /**
3081 - * @param array $admin_script_strings
3082 - */
3083 2819 $admin_script_strings = apply_filters( 'frm_admin_script_strings', $admin_script_strings );
3084 2820
3085 2821 $data = $wp_scripts->get_data( 'formidable_admin', 'data' );
3086 - if ( ! $data ) {
2822 + if ( empty( $data ) ) {
3087 2823 wp_localize_script( 'formidable_admin', 'frm_admin_js', $admin_script_strings );
3088 2824 }
3089 2825 }
3090 2826 }
@@ -3089,24 +2825,8 @@
3089 2825 }
3090 2826 }
3091 2827
3092 2828 /**
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 2829 * Returns whether or not the first errored input should be auto-focused (default true).
3110 2830 *
3111 2831 * @since 5.2.05
3112 2832 *
@@ -3151,10 +2871,8 @@
3151 2871 /**
3152 2872 * If Pro is far outdated, show a message.
3153 2873 *
3154 2874 * @since 4.0.01
3155 - *
3156 - * @return void
3157 2875 */
3158 2876 public static function min_pro_version_notice( $min_version ) {
3159 2877 if ( ! self::is_formidable_admin() ) {
3160 2878 // Don't show admin-wide.
@@ -3170,9 +2888,9 @@
3170 2888
3171 2889 $pro_version = FrmProDb::$plug_version;
3172 2890 $expired = FrmAddonsController::is_license_expired();
3173 2891 ?>
3174 - <div class="frm-banner-alert frm_error_style frm_previous_install">
2892 + <div class="error frm_previous_install">
3175 2893 <?php
3176 2894 esc_html_e( 'You are running a version of Formidable Forms that may not be compatible with your version of Formidable Forms Pro.', 'formidable' );
3177 2895 if ( empty( $expired ) ) {
3178 2896 echo ' Please <a href="' . esc_url( admin_url( 'plugins.php?s=formidable%20forms%20pro' ) ) . '">update now</a>.';
@@ -3211,9 +2929,9 @@
3211 2929 }
3212 2930
3213 2931 foreach ( $message as $m ) {
3214 2932 ?>
3215 - <div class="frm-banner-alert frm_error_style frm_previous_install">
2933 + <div class="error frm_previous_install">
3216 2934 <?php echo esc_html( $m ); ?>
3217 2935 </div>
3218 2936 <?php
3219 2937 }
@@ -3218,25 +2936,17 @@
3218 2936 <?php
3219 2937 }
3220 2938 }
3221 2939
3222 - /**
3223 - * @param string $type
3224 - * @return array<string,string>
3225 - */
3226 2940 public static function locales( $type = 'date' ) {
3227 2941 $locales = array(
3228 2942 'en' => __( 'English', 'formidable' ),
3229 2943 'af' => __( 'Afrikaans', 'formidable' ),
3230 2944 'sq' => __( 'Albanian', 'formidable' ),
3231 - 'ar-DZ' => __( 'Algerian Arabic', 'formidable' ),
3232 - 'am' => __( 'Amharic', 'formidable' ),
3233 2945 'ar' => __( 'Arabic', 'formidable' ),
3234 2946 'hy' => __( 'Armenian', 'formidable' ),
3235 2947 'az' => __( 'Azerbaijani', 'formidable' ),
3236 2948 'eu' => __( 'Basque', 'formidable' ),
3237 - 'be' => __( 'Belarusian', 'formidable' ),
3238 - 'bn' => __( 'Bengali', 'formidable' ),
3239 2949 'bs' => __( 'Bosnian', 'formidable' ),
3240 2950 'bg' => __( 'Bulgarian', 'formidable' ),
3241 2951 'ca' => __( 'Catalan', 'formidable' ),
3242 2952 'zh-HK' => __( 'Chinese Hong Kong', 'formidable' ),
@@ -3255,15 +2965,12 @@
3255 2965 'fi' => __( 'Finnish', 'formidable' ),
3256 2966 'fr' => __( 'French', 'formidable' ),
3257 2967 'fr-CA' => __( 'French/Canadian', 'formidable' ),
3258 2968 'fr-CH' => __( 'French/Swiss', 'formidable' ),
3259 - 'gl' => __( 'Galician', 'formidable' ),
3260 - 'ka' => __( 'Georgian', 'formidable' ),
3261 2969 'de' => __( 'German', 'formidable' ),
3262 2970 'de-AT' => __( 'German/Austria', 'formidable' ),
3263 2971 'de-CH' => __( 'German/Switzerland', 'formidable' ),
3264 2972 'el' => __( 'Greek', 'formidable' ),
3265 - 'gu' => __( 'Gujarati', 'formidable' ),
3266 2973 'he' => __( 'Hebrew', 'formidable' ),
3267 2974 'iw' => __( 'Hebrew', 'formidable' ),
3268 2975 'hi' => __( 'Hindi', 'formidable' ),
3269 2976 'hu' => __( 'Hungarian', 'formidable' ),
@@ -3270,74 +2977,44 @@
3270 2977 'is' => __( 'Icelandic', 'formidable' ),
3271 2978 'id' => __( 'Indonesian', 'formidable' ),
3272 2979 'it' => __( 'Italian', 'formidable' ),
3273 2980 'ja' => __( 'Japanese', 'formidable' ),
3274 - 'kn' => __( 'Kannada', 'formidable' ),
3275 - 'kk' => __( 'Kazakh', 'formidable' ),
3276 - 'km' => __( 'Khmer', 'formidable' ),
3277 2981 'ko' => __( 'Korean', 'formidable' ),
3278 - 'ky' => __( 'Kyrgyz', 'formidable' ),
3279 - 'lo' => __( 'Laothian', 'formidable' ),
3280 2982 'lv' => __( 'Latvian', 'formidable' ),
3281 2983 'lt' => __( 'Lithuanian', 'formidable' ),
3282 - 'lb' => __( 'Luxembourgish', 'formidable' ),
3283 - 'mk' => __( 'Macedonian', 'formidable' ),
3284 - 'ml' => __( 'Malayalam', 'formidable' ),
3285 2984 'ms' => __( 'Malaysian', 'formidable' ),
3286 - 'mr' => __( 'Marathi', 'formidable' ),
3287 2985 'no' => __( 'Norwegian', 'formidable' ),
3288 - 'nb' => __( 'Norwegian Bokmål', 'formidable' ),
3289 - 'nn' => __( 'Norwegian Nynorsk', 'formidable' ),
3290 2986 'pl' => __( 'Polish', 'formidable' ),
3291 2987 'pt' => __( 'Portuguese', 'formidable' ),
3292 2988 'pt-BR' => __( 'Portuguese/Brazilian', 'formidable' ),
3293 2989 'pt-PT' => __( 'Portuguese/Portugal', 'formidable' ),
3294 - 'rm' => __( 'Romansh', 'formidable' ),
3295 2990 'ro' => __( 'Romanian', 'formidable' ),
3296 2991 'ru' => __( 'Russian', 'formidable' ),
3297 2992 'sr' => __( 'Serbian', 'formidable' ),
3298 2993 'sr-SR' => __( 'Serbian', 'formidable' ),
3299 - 'si' => __( 'Sinhalese', 'formidable' ),
3300 2994 'sk' => __( 'Slovak', 'formidable' ),
3301 2995 'sl' => __( 'Slovenian', 'formidable' ),
3302 2996 'es' => __( 'Spanish', 'formidable' ),
3303 2997 'es-419' => __( 'Spanish/Latin America', 'formidable' ),
3304 - 'sw' => __( 'Swahili', 'formidable' ),
3305 2998 'sv' => __( 'Swedish', 'formidable' ),
3306 2999 'ta' => __( 'Tamil', 'formidable' ),
3307 - 'te' => __( 'Telugu', 'formidable' ),
3308 3000 'th' => __( 'Thai', 'formidable' ),
3309 - 'tj' => __( 'Tajiki', 'formidable' ),
3310 3001 'tr' => __( 'Turkish', 'formidable' ),
3311 3002 'uk' => __( 'Ukrainian', 'formidable' ),
3312 - 'ur' => __( 'Urdu', 'formidable' ),
3313 3003 'vi' => __( 'Vietnamese', 'formidable' ),
3314 - 'cy-GB' => __( 'Welsh', 'formidable' ),
3315 - 'zu' => __( 'Zulu', 'formidable' ),
3316 3004 );
3317 3005
3318 3006 if ( $type === 'captcha' ) {
3319 3007 // remove the languages unavailable for the captcha
3320 - $unset = array( 'sq', 'bs', 'eo', 'fo', 'fr-CH', 'sr-SR', 'ar-DZ', 'be', 'cy-GB', 'kk', 'km', 'ky', 'lb', 'mk', 'nb', 'nn', 'rm', 'tj' );
3008 + $unset = array( 'af', 'sq', 'hy', 'az', 'eu', 'bs', 'zh-HK', 'eo', 'et', 'fo', 'fr-CH', 'he', 'is', 'ms', 'sr-SR', 'ta' );
3321 3009 } else {
3322 3010 // remove the languages unavailable for the datepicker
3323 - $unset = array( 'fil', 'fr-CA', 'de-AT', 'de-CH', 'iw', 'hi', 'pt', 'pt-PT', 'es-419', 'mr', 'lo', 'kn', 'si', 'gu', 'bn', 'zu', 'ur', 'te', 'sw', 'am' );
3011 + $unset = array( 'fil', 'fr-CA', 'de-AT', 'de-CH', 'iw', 'hi', 'pt', 'pt-PT', 'es-419' );
3324 3012 }
3325 3013
3326 3014 $locales = array_diff_key( $locales, array_flip( $unset ) );
3015 + $locales = apply_filters( 'frm_locales', $locales );
3327 3016
3328 - /**
3329 - * Filter available locale options.
3330 - *
3331 - * @since 5.4.5 Added $args parameter with type.
3332 - *
3333 - * @param array<string,string> $locales
3334 - * @param array $args {
3335 - * @type string $type
3336 - * }
3337 - */
3338 - $locales = apply_filters( 'frm_locales', $locales, compact( 'type' ) );
3339 -
3340 3017 return $locales;
3341 3018 }
3342 3019
3343 3020 /**
@@ -3643,12 +3320,11 @@
3643 3320 * @return array
3644 3321 */
3645 3322 public static function get_landing_page_upgrade_data_params( $medium = 'landing' ) {
3646 3323 $params = array(
3647 - 'medium' => $medium,
3648 - 'upgrade' => __( 'Form Landing Pages', 'formidable' ),
3649 - 'message' => __( 'Easily manage a landing page for your form. Upgrade to get form landing pages.', 'formidable' ),
3650 - 'screenshot' => 'landing.png',
3324 + 'medium' => $medium,
3325 + 'upgrade' => __( 'Form Landing Pages', 'formidable' ),
3326 + 'message' => __( 'Easily manage a landing page for your form. Upgrade to get form landing pages.', 'formidable' ),
3651 3327 );
3652 3328 return self::get_upgrade_data_params( 'landing', $params );
3653 3329 }
3654 3330
@@ -3730,8 +3406,36 @@
3730 3406 set_current_screen();
3731 3407 }
3732 3408
3733 3409 /**
3410 + * @since 4.07
3411 + * @deprecated 4.09.01
3412 + */
3413 + public static function renewal_message() {
3414 + if ( is_callable( 'FrmProAddonsController::renewal_message' ) ) {
3415 + FrmProAddonsController::renewal_message();
3416 + return;
3417 + }
3418 +
3419 + if ( ! FrmAddonsController::is_license_expired() ) {
3420 + return;
3421 + }
3422 +
3423 + ?>
3424 + <div class="frm_error_style" style="text-align:left">
3425 + <?php self::icon_by_class( 'frmfont frm_alert_icon' ); ?>
3426 + &nbsp;
3427 + <?php esc_html_e( 'Your account has expired', 'formidable' ); ?>
3428 + <div style="float:right">
3429 + <a href="<?php echo esc_url( self::admin_upgrade_link( 'form-expired', 'account/downloads/' ) ); ?>">
3430 + <?php esc_html_e( 'Renew Now', 'formidable' ); ?>
3431 + </a>
3432 + </div>
3433 + </div>
3434 + <?php
3435 + }
3436 +
3437 + /**
3734 3438 * Shows pill text.
3735 3439 *
3736 3440 * @since 5.2.02
3737 3441 *
@@ -3820,54 +3524,8 @@
3820 3524 return array( 'list', 'trash', 'untrash', 'destroy' );
3821 3525 }
3822 3526
3823 3527 /**
3824 - * Safely call get_plugins, importing the required files if they are not yet loaded.
3825 - *
3826 - * @since 5.5
3827 - *
3828 - * @return array
3829 - */
3830 - public static function get_plugins() {
3831 - if ( ! function_exists( 'get_plugins' ) ) {
3832 - require_once ABSPATH . 'wp-admin/includes/plugin.php';
3833 - }
3834 - return get_plugins();
3835 - }
3836 -
3837 - /**
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 3528 * @since 4.08
3871 3529 * @deprecated 4.09.01
3872 3530 */
3873 3531 public static function expiring_message() {
@@ -3896,8 +3554,18 @@
3896 3554 FrmFormsHelper::insert_opt_html( $args );
3897 3555 }
3898 3556
3899 3557 /**
3558 + * Used to filter shortcode in text widgets
3559 + *
3560 + * @deprecated 2.5.4
3561 + * @codeCoverageIgnore
3562 + */
3563 + public static function widget_text_filter_callback( $matches ) {
3564 + return FrmDeprecated::widget_text_filter_callback( $matches );
3565 + }
3566 +
3567 + /**
3900 3568 * @deprecated 3.01
3901 3569 * @codeCoverageIgnore
3902 3570 */
3903 3571 public static function sanitize_array( &$values ) {
@@ -3904,86 +3572,165 @@
3904 3572 FrmDeprecated::sanitize_array( $values );
3905 3573 }
3906 3574
3907 3575 /**
3908 - * @since 2.0
3909 - * @deprecated 5.0.13
3576 + * @param array $settings
3577 + * @param string $group
3910 3578 *
3911 - * @return string The base Google APIS url for the current version of jQuery UI
3579 + * @since 2.0.6
3580 + * @deprecated 2.05.06
3581 + * @codeCoverageIgnore
3912 3582 */
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() : '';
3583 + public static function save_settings( $settings, $group ) {
3584 + return FrmDeprecated::save_settings( $settings, $group );
3916 3585 }
3917 3586
3918 3587 /**
3919 - * @since 4.07
3920 - * @deprecated 6.0
3588 + * @since 2.0.4
3589 + * @deprecated 2.05.06
3590 + * @codeCoverageIgnore
3921 3591 */
3922 - public static function renewal_message() {
3923 - _deprecated_function( __METHOD__, '6.0', 'FrmProAddonsController::renewal_message' );
3592 + public static function save_json_post( $settings ) {
3593 + return FrmDeprecated::save_json_post( $settings );
3924 3594 }
3925 3595
3926 3596 /**
3927 - * Display a dismissable warning message and save its dismissal state.
3597 + * @since 2.0
3598 + * @deprecated 2.05.06
3599 + * @codeCoverageIgnore
3928 3600 *
3929 - * @since 6.3
3601 + * @param string $cache_key The unique name for this cache
3602 + * @param string $group The name of the cache group
3603 + * @param string $query If blank, don't run a db call
3604 + * @param string $type The wpdb function to use with this query
3930 3605 *
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
3606 + * @return mixed $results The cache or query results
3934 3607 */
3935 - public static function add_dismissable_warning_message( $message = '', $option = '' ) {
3936 - if ( ! $message || ! $option ) {
3937 - return;
3938 - }
3608 + public static function check_cache( $cache_key, $group = '', $query = '', $type = 'get_var', $time = 300 ) {
3609 + return FrmDeprecated::check_cache( $cache_key, $group, $query, $type, $time );
3610 + }
3939 3611
3940 - $ajax_callback = function() use ( $option ) {
3941 - self::dismiss_warning_message( $option );
3942 - };
3612 + /**
3613 + * @deprecated 2.05.06
3614 + * @codeCoverageIgnore
3615 + */
3616 + public static function set_cache( $cache_key, $results, $group = '', $time = 300 ) {
3617 + return FrmDeprecated::set_cache( $cache_key, $results, $group, $time );
3618 + }
3943 3619
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 );
3620 + /**
3621 + * @deprecated 2.05.06
3622 + * @codeCoverageIgnore
3623 + */
3624 + public static function add_key_to_group_cache( $key, $group ) {
3625 + FrmDeprecated::add_key_to_group_cache( $key, $group );
3626 + }
3947 3627
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 - }
3628 + /**
3629 + * @deprecated 2.05.06
3630 + * @codeCoverageIgnore
3631 + */
3632 + public static function get_group_cached_keys( $group ) {
3633 + return FrmDeprecated::get_group_cached_keys( $group );
3634 + }
3954 3635
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 - );
3636 + /**
3637 + * @since 2.0
3638 + * @deprecated 2.05.06
3639 + * @codeCoverageIgnore
3640 + * @return mixed The cached value or false
3641 + */
3642 + public static function check_cache_and_transient( $cache_key ) {
3643 + return FrmDeprecated::check_cache( $cache_key );
3644 + }
3962 3645
3963 - $show_messages[] = $message;
3964 - $show_messages[] = '<span class="frm-warning-dismiss frmsvg" data-action="' . esc_attr( $option ) . '">' . $dismiss_icon . '</span>';
3646 + /**
3647 + * @since 2.0
3648 + * @deprecated 2.05.06
3649 + * @codeCoverageIgnore
3650 + *
3651 + * @param string $cache_key
3652 + */
3653 + public static function delete_cache_and_transient( $cache_key, $group = 'default' ) {
3654 + FrmDeprecated::delete_cache_and_transient( $cache_key, $group );
3655 + }
3965 3656
3966 - return $show_messages;
3967 - }
3968 - );
3657 + /**
3658 + * @since 2.0
3659 + * @deprecated 2.05.06
3660 + * @codeCoverageIgnore
3661 + *
3662 + * @param string $group The name of the cache group
3663 + */
3664 + public static function cache_delete_group( $group ) {
3665 + FrmDeprecated::cache_delete_group( $group );
3969 3666 }
3970 3667
3971 3668 /**
3972 - * Dismiss a warning message and update the dismissal state.
3669 + * @since 1.07.10
3670 + * @deprecated 2.05.06
3671 + * @codeCoverageIgnore
3973 3672 *
3974 - * @since 6.3
3673 + * @param string $term The value to escape
3975 3674 *
3976 - * @param string $option The unique identifier for the dismissal state of the message.
3977 - * @return void
3675 + * @return string The escaped value
3978 3676 */
3979 - public static function dismiss_warning_message( $option = '' ) {
3980 - self::permission_check( 'frm_change_settings' );
3981 - check_ajax_referer( 'frm_ajax', 'nonce' );
3677 + public static function esc_like( $term ) {
3678 + return FrmDeprecated::esc_like( $term );
3679 + }
3982 3680
3983 - if ( $option ) {
3984 - update_option( $option, true, 'no' );
3985 - }
3681 + /**
3682 + * @param string $order_query
3683 + *
3684 + * @deprecated 2.05.06
3685 + * @codeCoverageIgnore
3686 + */
3687 + public static function esc_order( $order_query ) {
3688 + return FrmDeprecated::esc_order( $order_query );
3689 + }
3986 3690
3987 - wp_send_json_success();
3691 + /**
3692 + * @deprecated 2.05.06
3693 + * @codeCoverageIgnore
3694 + */
3695 + public static function esc_order_by( &$order_by ) {
3696 + FrmDeprecated::esc_order_by( $order_by );
3697 + }
3698 +
3699 + /**
3700 + * @param string $limit
3701 + *
3702 + * @deprecated 2.05.06
3703 + * @codeCoverageIgnore
3704 + */
3705 + public static function esc_limit( $limit ) {
3706 + return FrmDeprecated::esc_limit( $limit );
3707 + }
3708 +
3709 + /**
3710 + * @since 2.0
3711 + * @deprecated 2.05.06
3712 + * @codeCoverageIgnore
3713 + */
3714 + public static function prepare_array_values( $array, $type = '%s' ) {
3715 + return FrmDeprecated::prepare_array_values( $array, $type );
3716 + }
3717 +
3718 + /**
3719 + * @deprecated 2.05.06
3720 + * @codeCoverageIgnore
3721 + */
3722 + public static function prepend_and_or_where( $starts_with = ' WHERE ', $where = '' ) {
3723 + return FrmDeprecated::prepend_and_or_where( $starts_with, $where );
3724 + }
3725 +
3726 + /**
3727 + * @since 2.0
3728 + * @deprecated 5.0.13
3729 + *
3730 + * @return string The base Google APIS url for the current version of jQuery UI
3731 + */
3732 + public static function jquery_ui_base_url() {
3733 + _deprecated_function( __FUNCTION__, '5.0.13', 'FrmProAppHelper::jquery_ui_base_url' );
3734 + return is_callable( 'FrmProAppHelper::jquery_ui_base_url' ) ? FrmProAppHelper::jquery_ui_base_url() : '';
3988 3735 }
3989 3736 }