PluginProbe
Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More / 5.2.01
Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More v5.2.01
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 +317 -745 6.5.15.2.01 View file →
@@ -3,21 +3,16 @@
3 3 die( 'You are not allowed to call this page directly.' );
4 4 }
5 5
6 6 class FrmAppHelper {
7 - public static $db_version = 98; // Version of the database we are moving to.
7 + public static $db_version = 98; // Version of the database we are moving to.
8 8 public static $pro_db_version = 37; //deprecated
9 - public static $font_version = 7;
9 + public static $font_version = 7;
10 10
11 11 /**
12 - * @var bool $added_gmt_offset_filter
13 - */
14 - private static $added_gmt_offset_filter = false;
15 -
16 - /**
17 12 * @since 2.0
18 13 */
19 - public static $plug_version = '6.5.1';
14 + public static $plug_version = '5.2.01';
20 15
21 16 /**
22 17 * @since 1.07.02
23 18 *
@@ -148,28 +143,12 @@
148 143
149 144 public static function get_menu_name() {
150 145 $frm_settings = self::get_settings();
151 146
152 - return FrmAddonsController::is_license_expired() ? 'Formidable' : $frm_settings->menu;
147 + return $frm_settings->menu;
153 148 }
154 149
155 150 /**
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 151 * @since 3.05
173 152 */
174 153 public static function svg_logo( $atts = array() ) {
175 154 $defaults = array(
@@ -268,15 +247,15 @@
268 247 global $pagenow;
269 248 $get_page = self::simple_get( 'page', 'sanitize_title' );
270 249 if ( $pagenow ) {
271 250 // 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;
251 + $is_page = ( $pagenow == 'admin.php' || $pagenow == 'admin-ajax.php' ) && $get_page == $page;
273 252 if ( $is_page ) {
274 253 return true;
275 254 }
276 255 }
277 256
278 - return is_admin() && $get_page === $page;
257 + return is_admin() && $get_page == $page;
279 258 }
280 259
281 260 /**
282 261 * If the current page is for editing or creating a view.
@@ -348,18 +327,14 @@
348 327 * Check if on an admin page
349 328 *
350 329 * @since 2.0
351 330 *
331 + * @param None
332 + *
352 333 * @return boolean
353 334 */
354 335 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 );
336 + return is_admin() && ! wp_doing_ajax();
362 337 }
363 338
364 339 /**
365 340 * Check if value contains blank value or empty array
@@ -392,37 +367,26 @@
392 367 return isset( $_SERVER[ $value ] ) ? wp_strip_all_tags( wp_unslash( $_SERVER[ $value ] ) ) : '';
393 368 }
394 369
395 370 /**
396 - * Get the server OS
371 + * Check for the IP address in several places
372 + * Used by [ip] shortcode
397 373 *
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 374 * @return string The IP address of the current user
420 375 */
421 376 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 -
377 + $ip_options = array(
378 + 'HTTP_CLIENT_IP',
379 + 'HTTP_CF_CONNECTING_IP',
380 + 'HTTP_X_FORWARDED_FOR',
381 + 'HTTP_X_FORWARDED',
382 + 'HTTP_X_CLUSTER_CLIENT_IP',
383 + 'HTTP_X_REAL_IP',
384 + 'HTTP_FORWARDED_FOR',
385 + 'HTTP_FORWARDED',
386 + 'REMOTE_ADDR',
387 + );
388 + $ip = '';
425 389 foreach ( $ip_options as $key ) {
426 390 if ( ! isset( $_SERVER[ $key ] ) ) {
427 391 continue;
428 392 }
@@ -428,9 +392,9 @@
428 392 }
429 393
430 394 $key = self::get_server_value( $key );
431 395 foreach ( explode( ',', $key ) as $ip ) {
432 - $ip = trim( $ip ); // Just to be safe.
396 + $ip = trim( $ip ); // just to be safe.
433 397
434 398 if ( filter_var( $ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE ) !== false ) {
435 399 return sanitize_text_field( $ip );
436 400 }
@@ -439,52 +403,8 @@
439 403
440 404 return sanitize_text_field( $ip );
441 405 }
442 406
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 407 public static function get_param( $param, $default = '', $src = 'get', $sanitize = '' ) {
488 408 if ( strpos( $param, '[' ) ) {
489 409 $params = explode( '[', $param );
490 410 $param = $params[0];
@@ -573,14 +493,14 @@
573 493 );
574 494 $args = wp_parse_args( $args, $defaults );
575 495
576 496 $value = $args['default'];
577 - if ( $args['type'] === 'get' ) {
497 + if ( $args['type'] == 'get' ) {
578 498 if ( $_GET && isset( $_GET[ $args['param'] ] ) ) {
579 499 // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized, WordPress.Security.NonceVerification.Missing
580 500 $value = wp_unslash( $_GET[ $args['param'] ] );
581 501 }
582 - } elseif ( $args['type'] === 'post' ) {
502 + } elseif ( $args['type'] == 'post' ) {
583 503 if ( isset( $_POST[ $args['param'] ] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing
584 504 // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized, WordPress.Security.NonceVerification.Missing
585 505 $value = wp_unslash( $_POST[ $args['param'] ] );
586 506 if ( $args['serialized'] === true && is_serialized_string( $value ) && is_serialized( $value ) ) {
@@ -1001,18 +921,8 @@
1001 921
1002 922 $html_atts = self::array_to_html_params( $atts );
1003 923
1004 924 $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 925 if ( $icon === $class ) {
1016 926 $icon = '<i class="' . esc_attr( $class ) . '"' . $html_atts . '></i>';
1017 927 } else {
1018 928 $class = strpos( $icon, ' ' ) === false ? '' : ' ' . $icon;
@@ -1069,9 +979,9 @@
1069 979 * @param array $allowed_attr
1070 980 * @return array
1071 981 */
1072 982 public static function allow_vars_in_styles( $allowed_attr ) {
1073 - $allowed_attr[] = '--primary-700';
983 + $allowed_attr[] = '--primary-hover';
1074 984 return $allowed_attr;
1075 985 }
1076 986
1077 987 /**
@@ -1080,9 +990,9 @@
1080 990 * @param bool $allow_css
1081 991 * @param string $css_string
1082 992 */
1083 993 public static function allow_style( $allow_css, $css_string ) {
1084 - if ( ! $allow_css && 0 === strpos( $css_string, '--primary-700:' ) ) {
994 + if ( ! $allow_css && 0 === strpos( $css_string, '--primary-hover:' ) ) {
1085 995 $split = explode( ':', $css_string, 2 );
1086 996 $allow_css = 2 === count( $split ) && self::is_a_valid_color( $split[1] );
1087 997 }
1088 998 return $allow_css;
@@ -1111,9 +1021,9 @@
1111 1021 *
1112 1022 * @since 4.0.02
1113 1023 */
1114 1024 public static function include_svg() {
1115 - include_once self::plugin_path() . '/images/icons.svg';
1025 + include_once( self::plugin_path() . '/images/icons.svg' );
1116 1026 }
1117 1027
1118 1028 /**
1119 1029 * Convert an associative array to HTML values.
@@ -1149,11 +1059,9 @@
1149 1059 if ( ! $echo ) {
1150 1060 ob_start();
1151 1061 }
1152 1062
1153 - if ( is_callable( $echo_function ) ) {
1154 - $echo_function();
1155 - }
1063 + $echo_function();
1156 1064
1157 1065 if ( ! $echo ) {
1158 1066 $return = ob_get_contents();
1159 1067 ob_end_clean();
@@ -1176,94 +1084,31 @@
1176 1084 include( self::plugin_path() . '/classes/views/shared/admin-header.php' );
1177 1085 }
1178 1086
1179 1087 /**
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 - * Render a button for a new item (Form, Application, etc).
1231 - *
1232 1088 * @since 3.0
1233 - * @param array $atts {
1234 - * @type array $link_hook Custom link hook, calls do_action and exits early.
1235 - * @type string $new_link Href value, default #.
1236 - * @type string $class Custom class names, space separated.
1237 - * @type string $button_text Button text. Default "Add New".
1238 - * }
1239 - * @return void
1089 + * @param array $atts
1240 1090 */
1241 1091 public static function add_new_item_link( $atts ) {
1242 - if ( isset( $atts['link_hook'] ) ) {
1092 + if ( ! empty( $atts['new_link'] ) ) {
1093 + ?>
1094 + <a href="<?php echo esc_url( $atts['new_link'] ); ?>" class="button button-primary frm-button-primary frm-with-plus">
1095 + <?php self::icon_by_class( 'frmfont frm_plus_icon frm_svg15' ); ?>
1096 + <?php esc_html_e( 'Add New', 'formidable' ); ?>
1097 + </a>
1098 + <?php
1099 + } elseif ( ! empty( $atts['trigger_new_form_modal'] ) ) {
1100 + ?>
1101 + <a href="#" class="button button-primary frm-button-primary frm-with-plus frm-trigger-new-form-modal">
1102 + <?php
1103 + self::icon_by_class( 'frmfont frm_plus_icon frm_svg15' );
1104 + esc_html_e( 'Add New', 'formidable' );
1105 + ?>
1106 + </a>
1107 + <?php
1108 + } elseif ( isset( $atts['link_hook'] ) ) {
1243 1109 do_action( $atts['link_hook']['hook'], $atts['link_hook']['param'] );
1244 - return;
1245 1110 }
1246 -
1247 - if ( empty( $atts['new_link'] ) && empty( $atts['trigger_new_form_modal'] ) && empty( $atts['class'] ) ) {
1248 - // Do not render a button if none of these attributes are set.
1249 - return;
1250 - }
1251 -
1252 - $href = ! empty( $atts['new_link'] ) ? esc_url( $atts['new_link'] ) : '#';
1253 - $class = 'button button-primary frm-button-primary';
1254 -
1255 - if ( ! empty( $atts['trigger_new_form_modal'] ) ) {
1256 - $class .= ' frm-trigger-new-form-modal';
1257 - }
1258 -
1259 - if ( ! empty( $atts['class'] ) ) {
1260 - $class .= ' ' . $atts['class'];
1261 - }
1262 -
1263 - $button_text = ! empty( $atts['button_text'] ) ? $atts['button_text'] : __( 'Add New', 'formidable' );
1264 -
1265 - require self::plugin_path() . '/classes/views/shared/add-button.php';
1266 1111 }
1267 1112
1268 1113 /**
1269 1114 * @since 3.06
@@ -1321,14 +1166,11 @@
1321 1166 }
1322 1167 }
1323 1168
1324 1169 /**
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.
1170 + * Save all front-end js scripts into a single file
1327 1171 *
1328 1172 * @since 3.0
1329 - *
1330 - * @return void
1331 1173 */
1332 1174 public static function save_combined_js() {
1333 1175 $file_atts = apply_filters(
1334 1176 'frm_js_location',
@@ -1341,34 +1183,10 @@
1341 1183
1342 1184 $files = array(
1343 1185 self::plugin_path() . '/js/formidable.min.js',
1344 1186 );
1345 - /**
1346 - * @param array $files
1347 - */
1348 1187 $files = apply_filters( 'frm_combined_js_files', $files );
1349 1188 $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 1189 }
1372 1190
1373 1191 /**
1374 1192 * Check a value from a shortcode to see if true or false.
@@ -1529,8 +1347,9 @@
1529 1347 public static function post_edit_link( $post_id ) {
1530 1348 $post = get_post( $post_id );
1531 1349 if ( $post ) {
1532 1350 $post_url = admin_url( 'post.php?post=' . $post_id . '&action=edit' );
1351 + $post_url = self::maybe_full_screen_link( $post_url );
1533 1352
1534 1353 return '<a href="' . esc_url( $post_url ) . '">' . self::truncate( $post->post_title, 50 ) . '</a>';
1535 1354 }
1536 1355
@@ -1540,64 +1359,25 @@
1540 1359 /**
1541 1360 * Hide the WordPress menus on some pages.
1542 1361 *
1543 1362 * @since 4.0
1544 - *
1545 - * @return bool
1546 1363 */
1547 1364 public static function is_full_screen() {
1548 - return self::is_form_builder_page() ||
1549 - self::is_style_editor_page() ||
1550 - self::is_full_screen_view_builder_page();
1551 - }
1365 + $full_builder = self::is_form_builder_page();
1366 + $styler = self::is_admin_page( 'formidable-styles' ) || self::is_admin_page( 'formidable-styles2' );
1367 + $full_entries = self::simple_get( 'frm-full', 'absint' );
1552 1368
1553 - /**
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;
1369 + return $full_builder || $full_entries || $styler || self::is_view_builder_page();
1583 1370 }
1584 1371
1585 1372 /**
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 1373 * @since 4.0
1596 - * @deprecated 5.5.3
1597 1374 */
1598 1375 public static function maybe_full_screen_link( $link ) {
1599 - _deprecated_function( __METHOD__, '5.5.3' );
1376 + $is_full = self::simple_get( 'frm-full', 'absint' );
1377 + if ( $is_full && ! empty( $link ) && $link !== '#' ) {
1378 + $link .= '&frm-full=1';
1379 + }
1600 1380 return $link;
1601 1381 }
1602 1382
1603 1383 /**
@@ -1657,10 +1437,19 @@
1657 1437 * @param string $type Supports `auto`, `pro`, or `pro_only`.
1658 1438 * @return array
1659 1439 */
1660 1440 public static function frm_capabilities( $type = 'auto' ) {
1661 - if ( ! self::pro_is_installed() && ! in_array( $type, array( 'pro', 'pro_only' ), true ) ) {
1662 - return self::get_lite_capabilities();
1441 + $cap = array(
1442 + 'frm_view_forms' => __( 'View Forms', 'formidable' ),
1443 + 'frm_edit_forms' => __( 'Add and Edit Forms', 'formidable' ),
1444 + 'frm_delete_forms' => __( 'Delete Forms', 'formidable' ),
1445 + 'frm_change_settings' => __( 'Access this Settings Page', 'formidable' ),
1446 + 'frm_view_entries' => __( 'View Entries from Admin Area', 'formidable' ),
1447 + 'frm_delete_entries' => __( 'Delete Entries from Admin Area', 'formidable' ),
1448 + );
1449 +
1450 + if ( ! self::pro_is_installed() && 'pro' !== $type && 'pro_only' !== $type ) {
1451 + return $cap;
1663 1452 }
1664 1453
1665 1454 $pro_cap = array(
1666 1455 'frm_create_entries' => __( 'Add Entries from Admin Area', 'formidable' ),
@@ -1667,41 +1456,17 @@
1667 1456 'frm_edit_entries' => __( 'Edit Entries from Admin Area', 'formidable' ),
1668 1457 'frm_view_reports' => __( 'View Reports', 'formidable' ),
1669 1458 'frm_edit_displays' => __( 'Add/Edit Views', 'formidable' ),
1670 1459 );
1671 - /**
1672 - * @since 5.3.1
1673 - *
1674 - * @param array<string,string> $pro_cap
1675 - */
1676 - $pro_cap = apply_filters( 'frm_pro_capabilities', $pro_cap );
1677 1460
1678 1461 if ( 'pro_only' === $type ) {
1679 1462 return $pro_cap;
1680 1463 }
1681 1464
1682 - return self::get_lite_capabilities() + $pro_cap;
1465 + return $cap + $pro_cap;
1683 1466 }
1684 1467
1685 1468 /**
1686 - * Get the list of lite plugin capabilities.
1687 - *
1688 - * @since 5.3.1
1689 - *
1690 - * @return array<string,string>
1691 - */
1692 - private static function get_lite_capabilities() {
1693 - return array(
1694 - 'frm_view_forms' => __( 'View Forms', 'formidable' ),
1695 - 'frm_edit_forms' => __( 'Add and Edit Forms', 'formidable' ),
1696 - 'frm_delete_forms' => __( 'Delete Forms', 'formidable' ),
1697 - 'frm_change_settings' => __( 'Access this Settings Page', 'formidable' ),
1698 - 'frm_view_entries' => __( 'View Entries from Admin Area', 'formidable' ),
1699 - 'frm_delete_entries' => __( 'Delete Entries from Admin Area', 'formidable' ),
1700 - );
1701 - }
1702 -
1703 - /**
1704 1469 * Call the WordPress current_user_can but also validate empty strings as true for any logged in user
1705 1470 *
1706 1471 * @since 4.06.03
1707 1472 *
@@ -1901,9 +1666,9 @@
1901 1666 foreach ( $array as $key => $value ) {
1902 1667 if ( is_array( $value ) ) {
1903 1668 $return = array_merge( $return, self::array_flatten( $value, $keys ) );
1904 1669 } else {
1905 - if ( $keys === 'keep' ) {
1670 + if ( $keys == 'keep' ) {
1906 1671 $return[ $key ] = $value;
1907 1672 } else {
1908 1673 $return[] = $value;
1909 1674 }
@@ -1987,9 +1752,9 @@
1987 1752 return $user_id;
1988 1753 }
1989 1754
1990 1755 $user_id = sanitize_text_field( $user_id );
1991 - if ( $user_id === 'current' ) {
1756 + if ( $user_id == 'current' ) {
1992 1757 $user_id = get_current_user_id();
1993 1758 } else {
1994 1759 if ( is_email( $user_id ) ) {
1995 1760 $user = get_user_by( 'email', $user_id );
@@ -2039,38 +1804,21 @@
2039 1804 }
2040 1805
2041 1806 $key = self::prevent_numeric_and_reserved_keys( $key );
2042 1807
2043 - $similar_keys = FrmDb::get_col(
1808 + $key_check = FrmDb::get_var(
2044 1809 $table_name,
2045 1810 array(
2046 - $column . ' like%' => $key,
2047 - 'ID !' => $id,
1811 + $column => $key,
1812 + 'ID !' => $id,
2048 1813 ),
2049 1814 $column
2050 1815 );
2051 1816
2052 - // Create a unique field id if it has already been used.
2053 - if ( in_array( $key, $similar_keys, true ) ) {
1817 + if ( $key_check || is_numeric( $key_check ) ) {
2054 1818 $key = self::maybe_truncate_key_before_appending( $column, $key );
2055 -
2056 - /**
2057 - * Allow for a custom separator between the attempted key and the generated suffix.
2058 - *
2059 - * @since 5.2.03
2060 - *
2061 - * @param string $separator. Default empty.
2062 - * @param string $key the key without the added suffix.
2063 - */
2064 - $separator = apply_filters( 'frm_unique_' . $column . '_separator', '', $key );
2065 -
2066 - $suffix = 2;
2067 - do {
2068 - $key_check = $key . $separator . $suffix;
2069 - ++$suffix;
2070 - } while ( in_array( $key_check, $similar_keys, true ) );
2071 -
2072 - $key = $key_check;
1819 + // Create a unique field id if it has already been used.
1820 + $key = $key . substr( md5( microtime() . rand() ), 0, 10 );
2073 1821 }
2074 1822
2075 1823 return $key;
2076 1824 }
@@ -2087,11 +1835,8 @@
2087 1835 if ( in_array( $column, array( 'form_key', 'field_key' ), true ) ) {
2088 1836 $max_key_length_before_truncating = 60;
2089 1837 if ( strlen( $key ) > $max_key_length_before_truncating ) {
2090 1838 $key = substr( $key, 0, $max_key_length_before_truncating );
2091 - if ( is_numeric( $key ) ) {
2092 - $key .= 'a';
2093 - }
2094 1839 }
2095 1840 }
2096 1841 return $key;
2097 1842 }
@@ -2457,9 +2202,9 @@
2457 2202 *
2458 2203 * @return string $time_ago
2459 2204 */
2460 2205 public static function human_time_diff( $from, $to = '', $levels = 1 ) {
2461 - if ( empty( $to ) && 0 !== $to ) {
2206 + if ( empty( $to ) ) {
2462 2207 $now = new DateTime();
2463 2208 } else {
2464 2209 $now = new DateTime( '@' . $to );
2465 2210 }
@@ -2710,9 +2455,8 @@
2710 2455 '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 2456 'from' => __( 'Enter the name and/or email address of the sender. FORMAT: John Bates <john@example.com> or john@example.com.', 'formidable' ),
2712 2457 /* translators: %1$s: Form name, %2$s: Date */
2713 2458 '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 2459 );
2716 2460
2717 2461 if ( ! isset( $tooltips[ $name ] ) ) {
2718 2462 return;
@@ -2739,12 +2483,8 @@
2739 2483 return;
2740 2484 }
2741 2485
2742 2486 $frm_action = self::simple_get( 'frm_action', 'sanitize_title' );
2743 - if ( 'lite-reports' === $frm_action ) {
2744 - $frm_action = 'reports';
2745 - }
2746 -
2747 2487 if ( empty( $action ) || ( ! empty( $frm_action ) && in_array( $frm_action, $action ) ) ) {
2748 2488 echo ' class="current_page"';
2749 2489 }
2750 2490 }
@@ -2801,15 +2541,12 @@
2801 2541 }
2802 2542 }
2803 2543
2804 2544 /**
2805 - * Check for either json or serialized data. This is temporary while transitioning
2545 + * Check for either json or serilized data. This is temporary while transitioning
2806 2546 * all data to json.
2807 2547 *
2808 2548 * @since 4.02.03
2809 - *
2810 - * @param array|string $value
2811 - * @return void
2812 2549 */
2813 2550 public static function unserialize_or_decode( &$value ) {
2814 2551 if ( is_array( $value ) ) {
2815 2552 return;
@@ -2815,9 +2552,9 @@
2815 2552 return;
2816 2553 }
2817 2554
2818 2555 if ( is_serialized( $value ) ) {
2819 - $value = self::maybe_unserialize_array( $value );
2556 + $value = maybe_unserialize( $value );
2820 2557 } else {
2821 2558 $value = self::maybe_json_decode( $value, false );
2822 2559 }
2823 2560 }
@@ -2822,35 +2559,8 @@
2822 2559 }
2823 2560 }
2824 2561
2825 2562 /**
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 2563 * Decode a JSON string.
2854 2564 * Do not switch shortcodes like [24] to array unless intentional ie XML values.
2855 2565 *
2856 2566 * @param mixed $string
@@ -2877,36 +2587,8 @@
2877 2587 return $string;
2878 2588 }
2879 2589
2880 2590 /**
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 2591 * Reformat the json serialized array in name => value array.
2910 2592 *
2911 2593 * @since 4.02.03
2912 2594 */
@@ -2972,17 +2654,14 @@
2972 2654 $version = self::plugin_version();
2973 2655 wp_register_script( 'formidable_admin_global', self::plugin_url() . '/js/formidable_admin_global.js', array( 'jquery' ), $version );
2974 2656
2975 2657 $global_strings = array(
2976 - 'updating_msg' => __( 'Please wait while your site updates.', 'formidable' ),
2977 - 'deauthorize' => __( 'Are you sure you want to deauthorize Formidable Forms on this site?', 'formidable' ),
2978 - 'url' => self::plugin_url(),
2979 - 'app_url' => 'https://formidableforms.com/',
2980 - 'applicationsUrl' => admin_url( 'admin.php?page=formidable-applications' ),
2981 - 'canAccessApplicationDashboard' => current_user_can( is_callable( 'FrmProApplicationsHelper::get_required_templates_capability' ) ? FrmProApplicationsHelper::get_required_templates_capability() : 'frm_edit_forms' ),
2982 - 'loading' => __( 'Loading&hellip;', 'formidable' ),
2983 - 'nonce' => wp_create_nonce( 'frm_ajax' ),
2984 - 'proIncludesSliderJs' => is_callable( 'FrmProFormsHelper::prepare_custom_currency' ),
2658 + 'updating_msg' => __( 'Please wait while your site updates.', 'formidable' ),
2659 + 'deauthorize' => __( 'Are you sure you want to deauthorize Formidable Forms on this site?', 'formidable' ),
2660 + 'url' => self::plugin_url(),
2661 + 'app_url' => 'https://formidableforms.com/',
2662 + 'loading' => __( 'Loading&hellip;', 'formidable' ),
2663 + 'nonce' => wp_create_nonce( 'frm_ajax' ),
2985 2664 );
2986 2665 wp_localize_script( 'formidable_admin_global', 'frmGlobal', $global_strings );
2987 2666
2988 2667 if ( $load ) {
@@ -3002,89 +2681,87 @@
3002 2681 */
3003 2682 public static function localize_script( $location ) {
3004 2683 global $wp_scripts;
3005 2684
2685 + $ajax_url = admin_url( 'admin-ajax.php', is_ssl() ? 'admin' : 'http' );
2686 + $ajax_url = apply_filters( 'frm_ajax_url', $ajax_url );
2687 +
3006 2688 $script_strings = array(
3007 - 'ajax_url' => esc_url_raw( self::get_ajax_url() ),
3008 - 'images_url' => self::plugin_url() . '/images',
3009 - 'loading' => __( 'Loading&hellip;', 'formidable' ),
3010 - 'remove' => __( 'Remove', 'formidable' ),
3011 - 'offset' => apply_filters( 'frm_scroll_offset', 4 ),
3012 - 'nonce' => wp_create_nonce( 'frm_ajax' ),
3013 - 'id' => __( 'ID', 'formidable' ),
3014 - 'no_results' => __( 'No results match', 'formidable' ),
3015 - 'file_spam' => __( 'That file looks like Spam.', 'formidable' ),
3016 - 'calc_error' => __( 'There is an error in the calculation in the field with key', 'formidable' ),
3017 - 'empty_fields' => __( 'Please complete the preceding required fields before uploading a file.', 'formidable' ),
3018 - 'focus_first_error' => self::should_focus_first_error(),
3019 - 'include_alert_role' => self::should_include_alert_role_on_field_errors(),
2689 + 'ajax_url' => $ajax_url,
2690 + 'images_url' => self::plugin_url() . '/images',
2691 + 'loading' => __( 'Loading&hellip;', 'formidable' ),
2692 + 'remove' => __( 'Remove', 'formidable' ),
2693 + 'offset' => apply_filters( 'frm_scroll_offset', 4 ),
2694 + 'nonce' => wp_create_nonce( 'frm_ajax' ),
2695 + 'id' => __( 'ID', 'formidable' ),
2696 + 'no_results' => __( 'No results match', 'formidable' ),
2697 + 'file_spam' => __( 'That file looks like Spam.', 'formidable' ),
2698 + 'calc_error' => __( 'There is an error in the calculation in the field with key', 'formidable' ),
2699 + 'empty_fields' => __( 'Please complete the preceding required fields before uploading a file.', 'formidable' ),
3020 2700 );
3021 2701
3022 2702 $data = $wp_scripts->get_data( 'formidable', 'data' );
3023 - if ( ! $data ) {
2703 + if ( empty( $data ) ) {
3024 2704 wp_localize_script( 'formidable', 'frm_js', $script_strings );
3025 2705 }
3026 2706
3027 - if ( $location === 'admin' ) {
2707 + if ( $location == 'admin' ) {
3028 2708 $frm_settings = self::get_settings();
3029 2709 $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(),
2710 + 'desc' => __( '(Click to add description)', 'formidable' ),
2711 + 'blank' => __( '(Blank)', 'formidable' ),
2712 + 'no_label' => __( '(no label)', 'formidable' ),
2713 + 'saving' => esc_attr( __( 'Saving', 'formidable' ) ),
2714 + 'saved' => esc_attr( __( 'Saved', 'formidable' ) ),
2715 + 'ok' => __( 'OK', 'formidable' ),
2716 + 'cancel' => __( 'Cancel', 'formidable' ),
2717 + 'default_label' => __( 'Default', 'formidable' ),
2718 + 'clear_default' => __( 'Clear default value when typing', 'formidable' ),
2719 + 'no_clear_default' => __( 'Do not clear default value when typing', 'formidable' ),
2720 + 'valid_default' => __( 'Default value will pass form validation', 'formidable' ),
2721 + 'no_valid_default' => __( 'Default value will NOT pass form validation', 'formidable' ),
2722 + 'caution' => __( 'Heads up', 'formidable' ),
2723 + 'confirm' => __( 'Are you sure?', 'formidable' ),
2724 + 'conf_delete' => __( 'Are you sure you want to delete this field and all data associated with it?', 'formidable' ),
2725 + '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' ),
2726 + 'conf_no_repeat' => __( 'Warning: If you have entries with multiple rows, all but the first row will be lost.', 'formidable' ),
2727 + 'default_unique' => $frm_settings->unique_msg,
2728 + 'default_conf' => __( 'The entered values do not match', 'formidable' ),
2729 + 'enter_email' => __( 'Enter Email', 'formidable' ),
2730 + 'confirm_email' => __( 'Confirm Email', 'formidable' ),
2731 + 'conditional_text' => __( 'Conditional content here', 'formidable' ),
2732 + 'new_option' => __( 'New Option', 'formidable' ),
2733 + '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' ),
2734 + 'enter_password' => __( 'Enter Password', 'formidable' ),
2735 + 'confirm_password' => __( 'Confirm Password', 'formidable' ),
2736 + 'import_complete' => __( 'Import Complete', 'formidable' ),
2737 + 'updating' => __( 'Please wait while your site updates.', 'formidable' ),
2738 + 'no_save_warning' => __( 'Warning: There is no way to retrieve unsaved entries.', 'formidable' ),
2739 + 'private_label' => __( 'Private', 'formidable' ),
2740 + 'jquery_ui_url' => '',
2741 + 'pro_url' => is_callable( 'FrmProAppHelper::plugin_url' ) ? FrmProAppHelper::plugin_url() : '',
2742 + 'no_licenses' => __( 'No new licenses were found', 'formidable' ),
2743 + 'unmatched_parens' => __( 'This calculation has at least one unmatched ( ) { } [ ].', 'formidable' ),
2744 + 'view_shortcodes' => __( 'This calculation may have shortcodes that work in Views but not forms.', 'formidable' ),
2745 + 'text_shortcodes' => __( 'This calculation may have shortcodes that work in text calculations but not numeric calculations.', 'formidable' ),
2746 + 'only_one_action' => __( 'This form action is limited to one per form. Please edit the existing form action.', 'formidable' ),
2747 + 'unsafe_params' => FrmFormsHelper::reserved_words(),
3065 2748 /* 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' ), '****' ),
2749 + 'slug_is_reserved' => sprintf( __( 'The Detail Page Slug "%s" is reserved by WordPress. This may cause problems. Is this intentional?', 'formidable' ), '****' ),
3067 2750 /* 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.
2751 + 'param_is_reserved' => sprintf( __( 'The parameter "%s" is reserved by WordPress. This may cause problems when included in the URL. Is this intentional? ', 'formidable' ), '****' ),
2752 + 'reserved_words' => __( 'See the list of reserved words in WordPress.', 'formidable' ),
2753 + 'repeat_limit_min' => __( 'Please enter a Repeat Limit that is greater than 1.', 'formidable' ),
2754 + 'checkbox_limit' => __( 'Please select a limit between 0 and 200.', 'formidable' ),
2755 + 'install' => __( 'Install', 'formidable' ),
2756 + 'active' => __( 'Active', 'formidable' ),
2757 + 'select_a_field' => __( 'Select a Field', 'formidable' ),
2758 + 'no_items_found' => __( 'No items found.', 'formidable' ),
3079 2759 );
3080 - /**
3081 - * @param array $admin_script_strings
3082 - */
3083 2760 $admin_script_strings = apply_filters( 'frm_admin_script_strings', $admin_script_strings );
3084 2761
3085 2762 $data = $wp_scripts->get_data( 'formidable_admin', 'data' );
3086 - if ( ! $data ) {
2763 + if ( empty( $data ) ) {
3087 2764 wp_localize_script( 'formidable_admin', 'frm_admin_js', $admin_script_strings );
3088 2765 }
3089 2766 }
3090 2767 }
@@ -3089,46 +2766,8 @@
3089 2766 }
3090 2767 }
3091 2768
3092 2769 /**
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 - * Returns whether or not the first errored input should be auto-focused (default true).
3110 - *
3111 - * @since 5.2.05
3112 - *
3113 - * @return bool
3114 - */
3115 - private static function should_focus_first_error() {
3116 - return (bool) apply_filters( 'frm_focus_first_error', true );
3117 - }
3118 -
3119 - /**
3120 - * Returns whether or not field errors should include role="alert" (default true).
3121 - *
3122 - * @since 5.2.05
3123 - *
3124 - * @return bool
3125 - */
3126 - public static function should_include_alert_role_on_field_errors() {
3127 - return (bool) apply_filters( 'frm_include_alert_role_on_field_errors', true );
3128 - }
3129 -
3130 - /**
3131 2770 * Echo the message on the plugins listing page
3132 2771 *
3133 2772 * @since 1.07.10
3134 2773 *
@@ -3151,10 +2790,8 @@
3151 2790 /**
3152 2791 * If Pro is far outdated, show a message.
3153 2792 *
3154 2793 * @since 4.0.01
3155 - *
3156 - * @return void
3157 2794 */
3158 2795 public static function min_pro_version_notice( $min_version ) {
3159 2796 if ( ! self::is_formidable_admin() ) {
3160 2797 // Don't show admin-wide.
@@ -3170,9 +2807,9 @@
3170 2807
3171 2808 $pro_version = FrmProDb::$plug_version;
3172 2809 $expired = FrmAddonsController::is_license_expired();
3173 2810 ?>
3174 - <div class="frm-banner-alert frm_error_style frm_previous_install">
2811 + <div class="error frm_previous_install">
3175 2812 <?php
3176 2813 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 2814 if ( empty( $expired ) ) {
3178 2815 echo ' Please <a href="' . esc_url( admin_url( 'plugins.php?s=formidable%20forms%20pro' ) ) . '">update now</a>.';
@@ -3211,9 +2848,9 @@
3211 2848 }
3212 2849
3213 2850 foreach ( $message as $m ) {
3214 2851 ?>
3215 - <div class="frm-banner-alert frm_error_style frm_previous_install">
2852 + <div class="error frm_previous_install">
3216 2853 <?php echo esc_html( $m ); ?>
3217 2854 </div>
3218 2855 <?php
3219 2856 }
@@ -3218,25 +2855,17 @@
3218 2855 <?php
3219 2856 }
3220 2857 }
3221 2858
3222 - /**
3223 - * @param string $type
3224 - * @return array<string,string>
3225 - */
3226 2859 public static function locales( $type = 'date' ) {
3227 2860 $locales = array(
3228 2861 'en' => __( 'English', 'formidable' ),
3229 2862 'af' => __( 'Afrikaans', 'formidable' ),
3230 2863 'sq' => __( 'Albanian', 'formidable' ),
3231 - 'ar-DZ' => __( 'Algerian Arabic', 'formidable' ),
3232 - 'am' => __( 'Amharic', 'formidable' ),
3233 2864 'ar' => __( 'Arabic', 'formidable' ),
3234 2865 'hy' => __( 'Armenian', 'formidable' ),
3235 2866 'az' => __( 'Azerbaijani', 'formidable' ),
3236 2867 'eu' => __( 'Basque', 'formidable' ),
3237 - 'be' => __( 'Belarusian', 'formidable' ),
3238 - 'bn' => __( 'Bengali', 'formidable' ),
3239 2868 'bs' => __( 'Bosnian', 'formidable' ),
3240 2869 'bg' => __( 'Bulgarian', 'formidable' ),
3241 2870 'ca' => __( 'Catalan', 'formidable' ),
3242 2871 'zh-HK' => __( 'Chinese Hong Kong', 'formidable' ),
@@ -3255,15 +2884,12 @@
3255 2884 'fi' => __( 'Finnish', 'formidable' ),
3256 2885 'fr' => __( 'French', 'formidable' ),
3257 2886 'fr-CA' => __( 'French/Canadian', 'formidable' ),
3258 2887 'fr-CH' => __( 'French/Swiss', 'formidable' ),
3259 - 'gl' => __( 'Galician', 'formidable' ),
3260 - 'ka' => __( 'Georgian', 'formidable' ),
3261 2888 'de' => __( 'German', 'formidable' ),
3262 2889 'de-AT' => __( 'German/Austria', 'formidable' ),
3263 2890 'de-CH' => __( 'German/Switzerland', 'formidable' ),
3264 2891 'el' => __( 'Greek', 'formidable' ),
3265 - 'gu' => __( 'Gujarati', 'formidable' ),
3266 2892 'he' => __( 'Hebrew', 'formidable' ),
3267 2893 'iw' => __( 'Hebrew', 'formidable' ),
3268 2894 'hi' => __( 'Hindi', 'formidable' ),
3269 2895 'hu' => __( 'Hungarian', 'formidable' ),
@@ -3270,74 +2896,44 @@
3270 2896 'is' => __( 'Icelandic', 'formidable' ),
3271 2897 'id' => __( 'Indonesian', 'formidable' ),
3272 2898 'it' => __( 'Italian', 'formidable' ),
3273 2899 'ja' => __( 'Japanese', 'formidable' ),
3274 - 'kn' => __( 'Kannada', 'formidable' ),
3275 - 'kk' => __( 'Kazakh', 'formidable' ),
3276 - 'km' => __( 'Khmer', 'formidable' ),
3277 2900 'ko' => __( 'Korean', 'formidable' ),
3278 - 'ky' => __( 'Kyrgyz', 'formidable' ),
3279 - 'lo' => __( 'Laothian', 'formidable' ),
3280 2901 'lv' => __( 'Latvian', 'formidable' ),
3281 2902 'lt' => __( 'Lithuanian', 'formidable' ),
3282 - 'lb' => __( 'Luxembourgish', 'formidable' ),
3283 - 'mk' => __( 'Macedonian', 'formidable' ),
3284 - 'ml' => __( 'Malayalam', 'formidable' ),
3285 2903 'ms' => __( 'Malaysian', 'formidable' ),
3286 - 'mr' => __( 'Marathi', 'formidable' ),
3287 2904 'no' => __( 'Norwegian', 'formidable' ),
3288 - 'nb' => __( 'Norwegian Bokmål', 'formidable' ),
3289 - 'nn' => __( 'Norwegian Nynorsk', 'formidable' ),
3290 2905 'pl' => __( 'Polish', 'formidable' ),
3291 2906 'pt' => __( 'Portuguese', 'formidable' ),
3292 2907 'pt-BR' => __( 'Portuguese/Brazilian', 'formidable' ),
3293 2908 'pt-PT' => __( 'Portuguese/Portugal', 'formidable' ),
3294 - 'rm' => __( 'Romansh', 'formidable' ),
3295 2909 'ro' => __( 'Romanian', 'formidable' ),
3296 2910 'ru' => __( 'Russian', 'formidable' ),
3297 2911 'sr' => __( 'Serbian', 'formidable' ),
3298 2912 'sr-SR' => __( 'Serbian', 'formidable' ),
3299 - 'si' => __( 'Sinhalese', 'formidable' ),
3300 2913 'sk' => __( 'Slovak', 'formidable' ),
3301 2914 'sl' => __( 'Slovenian', 'formidable' ),
3302 2915 'es' => __( 'Spanish', 'formidable' ),
3303 2916 'es-419' => __( 'Spanish/Latin America', 'formidable' ),
3304 - 'sw' => __( 'Swahili', 'formidable' ),
3305 2917 'sv' => __( 'Swedish', 'formidable' ),
3306 2918 'ta' => __( 'Tamil', 'formidable' ),
3307 - 'te' => __( 'Telugu', 'formidable' ),
3308 2919 'th' => __( 'Thai', 'formidable' ),
3309 - 'tj' => __( 'Tajiki', 'formidable' ),
3310 2920 'tr' => __( 'Turkish', 'formidable' ),
3311 2921 'uk' => __( 'Ukrainian', 'formidable' ),
3312 - 'ur' => __( 'Urdu', 'formidable' ),
3313 2922 'vi' => __( 'Vietnamese', 'formidable' ),
3314 - 'cy-GB' => __( 'Welsh', 'formidable' ),
3315 - 'zu' => __( 'Zulu', 'formidable' ),
3316 2923 );
3317 2924
3318 2925 if ( $type === 'captcha' ) {
3319 2926 // 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' );
2927 + $unset = array( 'af', 'sq', 'hy', 'az', 'eu', 'bs', 'zh-HK', 'eo', 'et', 'fo', 'fr-CH', 'he', 'is', 'ms', 'sr-SR', 'ta' );
3321 2928 } else {
3322 2929 // 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' );
2930 + $unset = array( 'fil', 'fr-CA', 'de-AT', 'de-CH', 'iw', 'hi', 'pt', 'pt-PT', 'es-419' );
3324 2931 }
3325 2932
3326 2933 $locales = array_diff_key( $locales, array_flip( $unset ) );
2934 + $locales = apply_filters( 'frm_locales', $locales );
3327 2935
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 2936 return $locales;
3341 2937 }
3342 2938
3343 2939 /**
@@ -3643,12 +3239,11 @@
3643 3239 * @return array
3644 3240 */
3645 3241 public static function get_landing_page_upgrade_data_params( $medium = 'landing' ) {
3646 3242 $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',
3243 + 'medium' => $medium,
3244 + 'upgrade' => __( 'Form Landing Pages', 'formidable' ),
3245 + 'message' => __( 'Easily manage a landing page for your form. Upgrade to get form landing pages.', 'formidable' ),
3651 3246 );
3652 3247 return self::get_upgrade_data_params( 'landing', $params );
3653 3248 }
3654 3249
@@ -3722,268 +3317,245 @@
3722 3317 * @since 5.2.01
3723 3318 */
3724 3319 public static function set_current_screen_and_hook_suffix() {
3725 3320 global $hook_suffix;
3726 - if ( is_null( $hook_suffix ) ) {
3727 - // $hook_suffix gets used in substr so make sure it's not null. PHP 8.1 deprecates null in substr.
3728 - $hook_suffix = ''; // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited
3729 - }
3730 3321 set_current_screen();
3731 3322 }
3732 3323
3733 3324 /**
3734 - * Shows pill text.
3735 - *
3736 - * @since 5.2.02
3737 - *
3738 - * @param string $text Text in the pill. Default is NEW.
3325 + * @since 4.07
3326 + * @deprecated 4.09.01
3739 3327 */
3740 - public static function show_pill_text( $text = null ) {
3741 - if ( null === $text ) {
3742 - $text = __( 'NEW', 'formidable' );
3328 + public static function renewal_message() {
3329 + if ( is_callable( 'FrmProAddonsController::renewal_message' ) ) {
3330 + FrmProAddonsController::renewal_message();
3331 + return;
3743 3332 }
3744 - echo '<span class="frm-new-pill">' . esc_html( $text ) . '</span>';
3333 +
3334 + if ( ! FrmAddonsController::is_license_expired() ) {
3335 + return;
3336 + }
3337 +
3338 + ?>
3339 + <div class="frm_error_style" style="text-align:left">
3340 + <?php self::icon_by_class( 'frmfont frm_alert_icon' ); ?>
3341 + &nbsp;
3342 + <?php esc_html_e( 'Your account has expired', 'formidable' ); ?>
3343 + <div style="float:right">
3344 + <a href="<?php echo esc_url( self::admin_upgrade_link( 'form-expired', 'account/downloads/' ) ); ?>">
3345 + <?php esc_html_e( 'Renew Now', 'formidable' ); ?>
3346 + </a>
3347 + </div>
3348 + </div>
3349 + <?php
3745 3350 }
3746 3351
3747 3352 /**
3748 - * Count the number of decimals digits.
3749 - *
3750 - * @since 5.2.07
3751 - *
3752 - * @param mixed $num Number.
3753 - * @return int|false Returns `false` if the passed parameter is not number.
3353 + * @since 4.08
3354 + * @deprecated 4.09.01
3754 3355 */
3755 - public static function count_decimals( $num ) {
3756 - if ( ! is_numeric( $num ) ) {
3757 - return false;
3356 + public static function expiring_message() {
3357 + _deprecated_function( __METHOD__, '4.09.01', 'FrmProAddonsController::expiring_message' );
3358 + if ( is_callable( 'FrmProAddonsController::expiring_message' ) ) {
3359 + FrmProAddonsController::expiring_message();
3758 3360 }
3759 -
3760 - $num = (string) $num;
3761 - $parts = explode( '.', $num );
3762 - if ( 1 === count( $parts ) ) {
3763 - return 0;
3764 - }
3765 -
3766 - return strlen( $parts[ count( $parts ) - 1 ] );
3767 3361 }
3768 3362
3769 3363 /**
3770 - * Prevent a fatal error in PHP8 if gmt_offset happens to be set an empty string.
3771 - * This is a bug in WordPress. It isn't safe to call current_time( 'timestamp' ) without this with an empty string offset.
3772 - * In the future this might be safe to remove. Keep an eye on the current_time function in functions.php.
3364 + * Use the WP 4.7 wp_doing_ajax function
3773 3365 *
3774 - * @since 5.3.1
3775 - *
3776 - * @return void
3366 + * @since 2.05.07
3367 + * @deprecated 4.04.04
3777 3368 */
3778 - public static function filter_gmt_offset() {
3779 - if ( self::$added_gmt_offset_filter ) {
3780 - // Avoid adding twice.
3781 - return;
3782 - }
3369 + public static function wp_doing_ajax() {
3370 + _deprecated_function( __METHOD__, '4.04.04', 'wp_doing_ajax' );
3371 + return wp_doing_ajax();
3372 + }
3783 3373
3784 - add_filter(
3785 - 'option_gmt_offset',
3786 - function( $offset ) {
3787 - if ( ! is_string( $offset ) || is_numeric( $offset ) ) {
3788 - // Leave a valid value alone.
3789 - return $offset;
3790 - }
3791 -
3792 - return 0;
3793 - }
3794 - );
3795 - self::$added_gmt_offset_filter = true;
3374 + /**
3375 + * @deprecated 4.0
3376 + */
3377 + public static function insert_opt_html( $args ) {
3378 + _deprecated_function( __METHOD__, '4.0', 'FrmFormsHelper::insert_opt_html' );
3379 + FrmFormsHelper::insert_opt_html( $args );
3796 3380 }
3797 3381
3798 3382 /**
3799 - * @since 5.3.1
3383 + * Used to filter shortcode in text widgets
3800 3384 *
3801 - * @return bool
3385 + * @deprecated 2.5.4
3386 + * @codeCoverageIgnore
3802 3387 */
3803 - public static function on_form_listing_page() {
3804 - if ( ! self::is_admin_page( 'formidable' ) ) {
3805 - return false;
3806 - }
3388 + public static function widget_text_filter_callback( $matches ) {
3389 + return FrmDeprecated::widget_text_filter_callback( $matches );
3390 + }
3807 3391
3808 - $action = self::simple_get( 'frm_action', 'sanitize_title' );
3809 - return ! $action || in_array( $action, self::get_form_listing_page_actions(), true );
3392 + /**
3393 + * @deprecated 3.01
3394 + * @codeCoverageIgnore
3395 + */
3396 + public static function sanitize_array( &$values ) {
3397 + FrmDeprecated::sanitize_array( $values );
3810 3398 }
3811 3399
3812 3400 /**
3813 - * Get all actions that also display the forms list.
3401 + * @param array $settings
3402 + * @param string $group
3814 3403 *
3815 - * @since 5.3.1
3816 - *
3817 - * @return array<string>
3404 + * @since 2.0.6
3405 + * @deprecated 2.05.06
3406 + * @codeCoverageIgnore
3818 3407 */
3819 - private static function get_form_listing_page_actions() {
3820 - return array( 'list', 'trash', 'untrash', 'destroy' );
3408 + public static function save_settings( $settings, $group ) {
3409 + return FrmDeprecated::save_settings( $settings, $group );
3821 3410 }
3822 3411
3823 3412 /**
3824 - * Safely call get_plugins, importing the required files if they are not yet loaded.
3825 - *
3826 - * @since 5.5
3827 - *
3828 - * @return array
3413 + * @since 2.0.4
3414 + * @deprecated 2.05.06
3415 + * @codeCoverageIgnore
3829 3416 */
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();
3417 + public static function save_json_post( $settings ) {
3418 + return FrmDeprecated::save_json_post( $settings );
3835 3419 }
3836 3420
3837 3421 /**
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.
3422 + * @since 2.0
3423 + * @deprecated 2.05.06
3424 + * @codeCoverageIgnore
3840 3425 *
3841 - * @since 5.5.5
3426 + * @param string $cache_key The unique name for this cache
3427 + * @param string $group The name of the cache group
3428 + * @param string $query If blank, don't run a db call
3429 + * @param string $type The wpdb function to use with this query
3842 3430 *
3843 - * @param string $url
3844 - * @param string $expected_extension
3845 - * @return bool
3431 + * @return mixed $results The cache or query results
3846 3432 */
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;
3433 + public static function check_cache( $cache_key, $group = '', $query = '', $type = 'get_var', $time = 300 ) {
3434 + return FrmDeprecated::check_cache( $cache_key, $group, $query, $type, $time );
3867 3435 }
3868 3436
3869 3437 /**
3870 - * @since 4.08
3871 - * @deprecated 4.09.01
3438 + * @deprecated 2.05.06
3439 + * @codeCoverageIgnore
3872 3440 */
3873 - public static function expiring_message() {
3874 - _deprecated_function( __METHOD__, '4.09.01', 'FrmProAddonsController::expiring_message' );
3875 - if ( is_callable( 'FrmProAddonsController::expiring_message' ) ) {
3876 - FrmProAddonsController::expiring_message();
3877 - }
3441 + public static function set_cache( $cache_key, $results, $group = '', $time = 300 ) {
3442 + return FrmDeprecated::set_cache( $cache_key, $results, $group, $time );
3878 3443 }
3879 3444
3880 3445 /**
3881 - * Use the WP 4.7 wp_doing_ajax function
3882 - *
3883 - * @since 2.05.07
3884 - * @deprecated 4.04.04
3446 + * @deprecated 2.05.06
3447 + * @codeCoverageIgnore
3885 3448 */
3886 - public static function wp_doing_ajax() {
3887 - _deprecated_function( __METHOD__, '4.04.04', 'wp_doing_ajax' );
3888 - return wp_doing_ajax();
3449 + public static function add_key_to_group_cache( $key, $group ) {
3450 + FrmDeprecated::add_key_to_group_cache( $key, $group );
3889 3451 }
3890 3452
3891 3453 /**
3892 - * @deprecated 4.0
3454 + * @deprecated 2.05.06
3455 + * @codeCoverageIgnore
3893 3456 */
3894 - public static function insert_opt_html( $args ) {
3895 - _deprecated_function( __METHOD__, '4.0', 'FrmFormsHelper::insert_opt_html' );
3896 - FrmFormsHelper::insert_opt_html( $args );
3457 + public static function get_group_cached_keys( $group ) {
3458 + return FrmDeprecated::get_group_cached_keys( $group );
3897 3459 }
3898 3460
3899 3461 /**
3900 - * @deprecated 3.01
3462 + * @since 2.0
3463 + * @deprecated 2.05.06
3901 3464 * @codeCoverageIgnore
3465 + * @return mixed The cached value or false
3902 3466 */
3903 - public static function sanitize_array( &$values ) {
3904 - FrmDeprecated::sanitize_array( $values );
3467 + public static function check_cache_and_transient( $cache_key ) {
3468 + return FrmDeprecated::check_cache( $cache_key );
3905 3469 }
3906 3470
3907 3471 /**
3908 3472 * @since 2.0
3909 - * @deprecated 5.0.13
3473 + * @deprecated 2.05.06
3474 + * @codeCoverageIgnore
3910 3475 *
3911 - * @return string The base Google APIS url for the current version of jQuery UI
3476 + * @param string $cache_key
3912 3477 */
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() : '';
3478 + public static function delete_cache_and_transient( $cache_key, $group = 'default' ) {
3479 + FrmDeprecated::delete_cache_and_transient( $cache_key, $group );
3916 3480 }
3917 3481
3918 3482 /**
3919 - * @since 4.07
3920 - * @deprecated 6.0
3483 + * @since 2.0
3484 + * @deprecated 2.05.06
3485 + * @codeCoverageIgnore
3486 + *
3487 + * @param string $group The name of the cache group
3921 3488 */
3922 - public static function renewal_message() {
3923 - _deprecated_function( __METHOD__, '6.0', 'FrmProAddonsController::renewal_message' );
3489 + public static function cache_delete_group( $group ) {
3490 + FrmDeprecated::cache_delete_group( $group );
3924 3491 }
3925 3492
3926 3493 /**
3927 - * Display a dismissable warning message and save its dismissal state.
3494 + * @since 1.07.10
3495 + * @deprecated 2.05.06
3496 + * @codeCoverageIgnore
3928 3497 *
3929 - * @since 6.3
3498 + * @param string $term The value to escape
3930 3499 *
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
3500 + * @return string The escaped value
3934 3501 */
3935 - public static function add_dismissable_warning_message( $message = '', $option = '' ) {
3936 - if ( ! $message || ! $option ) {
3937 - return;
3938 - }
3502 + public static function esc_like( $term ) {
3503 + return FrmDeprecated::esc_like( $term );
3504 + }
3939 3505
3940 - $ajax_callback = function() use ( $option ) {
3941 - self::dismiss_warning_message( $option );
3942 - };
3506 + /**
3507 + * @param string $order_query
3508 + *
3509 + * @deprecated 2.05.06
3510 + * @codeCoverageIgnore
3511 + */
3512 + public static function esc_order( $order_query ) {
3513 + return FrmDeprecated::esc_order( $order_query );
3514 + }
3943 3515
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 );
3516 + /**
3517 + * @deprecated 2.05.06
3518 + * @codeCoverageIgnore
3519 + */
3520 + public static function esc_order_by( &$order_by ) {
3521 + FrmDeprecated::esc_order_by( $order_by );
3522 + }
3947 3523
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 - }
3524 + /**
3525 + * @param string $limit
3526 + *
3527 + * @deprecated 2.05.06
3528 + * @codeCoverageIgnore
3529 + */
3530 + public static function esc_limit( $limit ) {
3531 + return FrmDeprecated::esc_limit( $limit );
3532 + }
3954 3533
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 - );
3534 + /**
3535 + * @since 2.0
3536 + * @deprecated 2.05.06
3537 + * @codeCoverageIgnore
3538 + */
3539 + public static function prepare_array_values( $array, $type = '%s' ) {
3540 + return FrmDeprecated::prepare_array_values( $array, $type );
3541 + }
3962 3542
3963 - $show_messages[] = $message;
3964 - $show_messages[] = '<span class="frm-warning-dismiss frmsvg" data-action="' . esc_attr( $option ) . '">' . $dismiss_icon . '</span>';
3965 -
3966 - return $show_messages;
3967 - }
3968 - );
3543 + /**
3544 + * @deprecated 2.05.06
3545 + * @codeCoverageIgnore
3546 + */
3547 + public static function prepend_and_or_where( $starts_with = ' WHERE ', $where = '' ) {
3548 + return FrmDeprecated::prepend_and_or_where( $starts_with, $where );
3969 3549 }
3970 3550
3971 3551 /**
3972 - * Dismiss a warning message and update the dismissal state.
3552 + * @since 2.0
3553 + * @deprecated 5.0.13
3973 3554 *
3974 - * @since 6.3
3975 - *
3976 - * @param string $option The unique identifier for the dismissal state of the message.
3977 - * @return void
3555 + * @return string The base Google APIS url for the current version of jQuery UI
3978 3556 */
3979 - public static function dismiss_warning_message( $option = '' ) {
3980 - self::permission_check( 'frm_change_settings' );
3981 - check_ajax_referer( 'frm_ajax', 'nonce' );
3982 -
3983 - if ( $option ) {
3984 - update_option( $option, true, 'no' );
3985 - }
3986 -
3987 - wp_send_json_success();
3557 + public static function jquery_ui_base_url() {
3558 + _deprecated_function( __FUNCTION__, '5.0.13', 'FrmProAppHelper::jquery_ui_base_url' );
3559 + return is_callable( 'FrmProAppHelper::jquery_ui_base_url' ) ? FrmProAppHelper::jquery_ui_base_url() : '';
3988 3560 }
3989 3561 }