plugin updates

This commit is contained in:
Tony Volpe
2024-07-16 13:57:46 +00:00
parent 41f50eacc4
commit 8f93917880
1529 changed files with 259452 additions and 25451 deletions
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
<?php return array('hash_map' => array('admin-components.min.css' => array('version' => '9dd7d37048e495531735e0c92f01adaa', 'file' => 'admin-components.min.css'), 'admin-css-utilities.min.css' => array('version' => '047c723392c56ed67effb778811f50ea', 'file' => 'admin-css-utilities.min.css'), 'admin-icons.min.css' => array('version' => '520e7dcc452befec5f1c95e51400ec2d', 'file' => 'admin-icons.min.css'), 'admin-ie11.min.css' => array('version' => 'b1f15b2772b378a5549ac45eefe2fcb7', 'file' => 'admin-ie11.min.css'), 'admin-theme.min.css' => array('version' => '270baaa4a4676e49811a01a5c4a82772', 'file' => 'admin-theme.min.css'), 'admin.min.css' => array('version' => 'e55acd4e3136f482b5e7b84c6e05fbf4', 'file' => 'admin.min.css'), 'basic.min.css' => array('version' => '7c634fb5e58e3069852425c5fbda9ba2', 'file' => 'basic.min.css'), 'blocks.min.css' => array('version' => 'f7b147e3138419bb9db86d7e0b0bd5e5', 'file' => 'blocks.min.css'), 'common-css-utilities.min.css' => array('version' => '2633df3a029b0d34687e2d197707e947', 'file' => 'common-css-utilities.min.css'), 'editor.min.css' => array('version' => '2f49083c345e8bfb0963334961946713', 'file' => 'editor.min.css'), 'font-awesome.min.css' => array('version' => 'ab928ca9bd3a308082b143be8a422524', 'file' => 'font-awesome.min.css'), 'gravity-forms-common-icons.min.css' => array('version' => '7144d998edb50d92c9bd4e51d89e1248', 'file' => 'gravity-forms-common-icons.min.css'), 'gravity-forms-orbital-theme.min.css' => array('version' => 'd41d8cd98f00b204e9800998ecf8427e', 'file' => 'gravity-forms-orbital-theme.min.css'), 'gravity-forms-theme-foundation.min.css' => array('version' => '94744ebb37fc7f75e9394441b95baeff', 'file' => 'gravity-forms-theme-foundation.min.css'), 'gravity-forms-theme-framework.min.css' => array('version' => '7ed359ef17010b5a486e83c0767de750', 'file' => 'gravity-forms-theme-framework.min.css'), 'gravity-forms-theme-reset.min.css' => array('version' => '590d763581c57d55da02972ac0f387d2', 'file' => 'gravity-forms-theme-reset.min.css'), 'settings.min.css' => array('version' => '8c062a85042743d38d48ac37fb39810d', 'file' => 'settings.min.css'), 'setup-wizard.min.css' => array('version' => '7c1011a25f000c4eb8f1bcb85fa4dfa2', 'file' => 'setup-wizard.min.css'), 'template-library.min.css' => array('version' => '560c6c8266f8a6c5cf81077ad29c13a9', 'file' => 'template-library.min.css'), 'theme-components.min.css' => array('version' => 'd41d8cd98f00b204e9800998ecf8427e', 'file' => 'theme-components.min.css'), 'theme-ie11.min.css' => array('version' => '67ea51dbc2856d10c83352871408a6da', 'file' => 'theme-ie11.min.css'), 'theme.min.css' => array('version' => '6a7e3f08eafa3f4cd82cb28dfa574bfa', 'file' => 'theme.min.css')));
<?php return array('hash_map' => array('admin-components.min.css' => array('version' => 'f78e5368d8b599a78b9709de2178cf97', 'file' => 'admin-components.min.css'), 'admin-css-utilities.min.css' => array('version' => '047c723392c56ed67effb778811f50ea', 'file' => 'admin-css-utilities.min.css'), 'admin-icons.min.css' => array('version' => '520e7dcc452befec5f1c95e51400ec2d', 'file' => 'admin-icons.min.css'), 'admin-ie11.min.css' => array('version' => 'b1f15b2772b378a5549ac45eefe2fcb7', 'file' => 'admin-ie11.min.css'), 'admin-theme.min.css' => array('version' => '181487c53e25a62e81e1db77d7c504e3', 'file' => 'admin-theme.min.css'), 'admin.min.css' => array('version' => 'ad4bd4031a7381623aa492f221204300', 'file' => 'admin.min.css'), 'basic.min.css' => array('version' => '4bedfdb9cf94d64f854157dffba8b66f', 'file' => 'basic.min.css'), 'blocks.min.css' => array('version' => 'f7b147e3138419bb9db86d7e0b0bd5e5', 'file' => 'blocks.min.css'), 'common-css-utilities.min.css' => array('version' => '2633df3a029b0d34687e2d197707e947', 'file' => 'common-css-utilities.min.css'), 'editor.min.css' => array('version' => '6a4bdd86191cb74f53524474d2ee78a8', 'file' => 'editor.min.css'), 'font-awesome.min.css' => array('version' => 'ab928ca9bd3a308082b143be8a422524', 'file' => 'font-awesome.min.css'), 'gravity-forms-common-icons.min.css' => array('version' => '7144d998edb50d92c9bd4e51d89e1248', 'file' => 'gravity-forms-common-icons.min.css'), 'gravity-forms-orbital-theme.min.css' => array('version' => 'd41d8cd98f00b204e9800998ecf8427e', 'file' => 'gravity-forms-orbital-theme.min.css'), 'gravity-forms-theme-foundation.min.css' => array('version' => '24e1aab73d398b04bedb185ac75f540d', 'file' => 'gravity-forms-theme-foundation.min.css'), 'gravity-forms-theme-framework.min.css' => array('version' => '7ed359ef17010b5a486e83c0767de750', 'file' => 'gravity-forms-theme-framework.min.css'), 'gravity-forms-theme-reset.min.css' => array('version' => '590d763581c57d55da02972ac0f387d2', 'file' => 'gravity-forms-theme-reset.min.css'), 'settings.min.css' => array('version' => '4cb83c6672a27a4c740ed77ad231fd11', 'file' => 'settings.min.css'), 'setup-wizard.min.css' => array('version' => '7c1011a25f000c4eb8f1bcb85fa4dfa2', 'file' => 'setup-wizard.min.css'), 'template-library.min.css' => array('version' => '560c6c8266f8a6c5cf81077ad29c13a9', 'file' => 'template-library.min.css'), 'theme-components.min.css' => array('version' => 'd41d8cd98f00b204e9800998ecf8427e', 'file' => 'theme-components.min.css'), 'theme-ie11.min.css' => array('version' => '67ea51dbc2856d10c83352871408a6da', 'file' => 'theme-ie11.min.css'), 'theme.min.css' => array('version' => '6a7e3f08eafa3f4cd82cb28dfa574bfa', 'file' => 'theme.min.css')));
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
<?php return array('hash_map' => array('admin-components.min.js' => array('version' => '900b46a84d21ec80529b4f9deceedcf2', 'file' => 'admin-components.min.js'), 'field-map.min.js' => array('version' => '84020c3233d4d733827697c497c6d21a', 'file' => 'field-map.min.js'), 'libraries.min.js' => array('version' => '6c0405e13e9ffc0d2b84693dc42b2b7e', 'file' => 'libraries.min.js'), 'react-utils.min.js' => array('version' => 'bbc3000c8a45e2682607d70a94364e8e', 'file' => 'react-utils.min.js'), 'scripts-admin.min.js' => array('version' => '57cbdd887648d4351e7c6f0788496f55', 'file' => 'scripts-admin.min.js'), 'scripts-theme.min.js' => array('version' => 'bab19fd84843dabc070e73326d787910', 'file' => 'scripts-theme.min.js'), 'utils.min.js' => array('version' => '2d19baeb93e2a0395e435793e50c082b', 'file' => 'utils.min.js'), 'vendor-admin.min.js' => array('version' => 'f9d49e7c9f6abe6e383e3ea7a39d5ed4', 'file' => 'vendor-admin.min.js'), 'vendor-theme.min.js' => array('version' => '54e7080aa7a02c83aa61fae430b9d869', 'file' => 'vendor-theme.min.js')));
<?php return array('hash_map' => array('admin-components.min.js' => array('version' => 'd3da429245df2304052f25a717f81f33', 'file' => 'admin-components.min.js'), 'field-map.min.js' => array('version' => 'e77eb20133d901fe111e6d657c4c91ee', 'file' => 'field-map.min.js'), 'libraries.min.js' => array('version' => '6c0405e13e9ffc0d2b84693dc42b2b7e', 'file' => 'libraries.min.js'), 'react-utils.min.js' => array('version' => 'bbbfda45ea7581abbbc9eb3813419642', 'file' => 'react-utils.min.js'), 'scripts-admin.min.js' => array('version' => '0d2a28828c0f16792ec10b3ace8829fe', 'file' => 'scripts-admin.min.js'), 'scripts-theme.min.js' => array('version' => 'bab19fd84843dabc070e73326d787910', 'file' => 'scripts-theme.min.js'), 'utils.min.js' => array('version' => '50c7bea9c2320e16728e44ae9fde5f26', 'file' => 'utils.min.js'), 'vendor-admin.min.js' => array('version' => '8136dae29cd48bfcaf5e37fffe3905fe', 'file' => 'vendor-admin.min.js'), 'vendor-theme.min.js' => array('version' => '54e7080aa7a02c83aa61fae430b9d869', 'file' => 'vendor-theme.min.js')));
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,5 +1,22 @@
### 2.8.14 | 2024-07-10
- Fixed the compatibility of the reCAPTCHA v2 field with Conversational Forms by removing the field from the form in Conversational view.
- Fixed a PHP warning that occurs when the current user role only has the capability to access the System Status Page.
### 2.8.13 | 2024-06-26
- Fixed an issue where custom theme styles are sometimes not applied on confirmation page or when navigating between pages in a multi-page form.
- Fixed an issue where the AJAX spinner init script is output in save and continue notifications, which can impact deliverability in some environments.
- Fixed an issue where a choice of 00 in the minute settings for the form scheduled start and end times changes to 01 on save.
- Updated and improved the performance of database queries by removing the legacy table check.
- AF: Fixed an issue where a saved value of 0 is not displayed in text type settings.
### 2.8.12 | 2024-05-29
- Fixed an issue where a console error is thrown if gform.initializeOnLoaded is called directly.
- Fixed an issue where the Conversational Forms Add-On settings page is not displayed if the site is using a plugin to manage roles and capabilities.
### 2.8.11 | 2024-05-15
- Fixed an issue where some forms are broken due a missing gform variable caused by recent changes to the Dom_Parser class.
- Change the Dropdown component con compact view for the Droplist
- Updated package version
### 2.8.10 | 2024-05-14
- Fixed a fatal error when a user submits a form with files attached to the Save & Continue notification.
@@ -861,7 +861,7 @@ class GFFormDisplay {
$post_render_script = '
jQuery(document).trigger("gform_pre_post_render", [{ formId: "' . $form_id . '", currentPage: "' . $current_page . '", abort: function() { this.preventDefault(); } }]);
if (event.defaultPrevented) {
if (event && event.defaultPrevented) {
return;
}
const gformWrapperDiv = document.getElementById( "gform_wrapper_' . $form_id . '" );
@@ -4810,23 +4810,23 @@ class GFFormDisplay {
</div>";
}
if ( ! $ajax ) {
/**
* Allows users to disable the spinner on non-ajax forms.
*
* @since 2.7
*
* @param bool $show Whether to show the spinner on non-ajax-forms.
*
* @return bool
*/
$always_show_spinner = gf_apply_filters( array( 'gform_always_show_spinner', $form_id ), true );
/**
* Allows users to disable the spinner on non-ajax forms.
*
* @since 2.7
*
* @param bool $show Whether to show the spinner on non-ajax-forms.
*
* @return bool
*/
$always_show_spinner = gf_apply_filters( array( 'gform_always_show_spinner', $form_id ), true );
if ( ! $ajax && $always_show_spinner ) {
$default_spinner = GFCommon::get_base_url() . '/images/spinner.svg';
$spinner_url = gf_apply_filters( array( 'gform_ajax_spinner_url', $form_id ), $default_spinner, $form );
$theme_slug = self::get_form_theme_slug( $form );
$is_legacy = $default_spinner !== $spinner_url || in_array( $theme_slug, array( 'gravity-theme', 'legacy' ) );
$text .= '<script>gform.initializeOnLoaded( function() {' .
$resume_form .= '<script>gform.initializeOnLoaded( function() {' .
"gformInitSpinner( {$form_id}, '{$spinner_url}', " . ( $is_legacy ? 'true' : 'false' ) . " );" .
" });</script>";
}
@@ -5788,14 +5788,12 @@ class GFFormsModel {
public static function drop_tables() {
global $wpdb;
remove_filter( 'query', array( 'GFForms', 'filter_query' ) );
foreach ( GF_Forms_Model_Legacy::get_legacy_tables() as $table ) {
$wpdb->query( "DROP TABLE IF EXISTS $table" );
}
foreach ( self::get_tables() as $table ) {
$wpdb->query( "DROP TABLE IF EXISTS $table" );
}
add_filter( 'query', array( 'GFForms', 'filter_query' ) );
}
/**
@@ -5825,9 +5823,6 @@ class GFFormsModel {
$drop_tables = array_merge( $drop_tables, $legacy_tables );
// Prevent the legacy table query notice when they are dropped by wp_uninitialize_site().
remove_filter( 'query', array( 'GFForms', 'filter_query' ) );
return $drop_tables;
}
@@ -7823,11 +7818,11 @@ class GFFormsModel {
$form['scheduleForm'] = (bool) $form['scheduleForm'];
$form['scheduleStart'] = $form['scheduleForm'] ? wp_strip_all_tags( $form['scheduleStart'] ) : '';
$form['scheduleStartHour'] = $form['scheduleForm'] ? GFCommon::int_range( $form['scheduleStartHour'], 1, 12 ) : '';
$form['scheduleStartMinute'] = $form['scheduleForm'] ? GFCommon::int_range( $form['scheduleStartMinute'], 1, 60 ) : '';
$form['scheduleStartMinute'] = $form['scheduleForm'] ? GFCommon::int_range( $form['scheduleStartMinute'], 0, 59 ) : '';
$form['scheduleStartAmpm'] = $form['scheduleForm'] ? GFCommon::whitelist( $form['scheduleStartAmpm'], array( 'am', 'pm' ) ) : '';
$form['scheduleEnd'] = $form['scheduleForm'] ? wp_strip_all_tags( $form['scheduleEnd'] ) : '';
$form['scheduleEndHour'] = $form['scheduleForm'] ? GFCommon::int_range( $form['scheduleEndHour'], 1, 12 ) : '';
$form['scheduleEndMinute'] = $form['scheduleForm'] ? GFCommon::int_range( $form['scheduleEndMinute'], 1, 60 ) : '';
$form['scheduleEndMinute'] = $form['scheduleForm'] ? GFCommon::int_range( $form['scheduleEndMinute'], 0, 59 ) : '';
$form['scheduleEndAmpm'] = $form['scheduleForm'] ? GFCommon::whitelist( $form['scheduleEndAmpm'], array( 'am', 'pm' ) ) : '';
$form['schedulePendingMessage'] = $form['scheduleForm'] ? self::maybe_wp_kses( $form['schedulePendingMessage'] ) : '';
$form['scheduleMessage'] = $form['scheduleForm'] ? self::maybe_wp_kses( $form['scheduleMessage'] ) : '';
@@ -3,7 +3,7 @@
Plugin Name: Gravity Forms
Plugin URI: https://gravityforms.com
Description: Easily create web forms and manage form entries within the WordPress admin.
Version: 2.8.11
Version: 2.8.14
Requires at least: 4.0
Requires PHP: 5.6
Author: Gravity Forms
@@ -204,7 +204,6 @@ add_action( 'init', array( 'GFForms', 'init_buffer' ) );
add_filter( 'upgrader_pre_install', array( 'GFForms', 'validate_upgrade' ), 10, 2 );
add_filter( 'tiny_mce_before_init', array( 'GFForms', 'modify_tiny_mce_4' ), 20 );
add_filter( 'user_has_cap', array( 'RGForms', 'user_has_cap' ), 10, 4 );
add_filter( 'query', array( 'GFForms', 'filter_query' ) );
add_filter( 'plugin_auto_update_setting_html', array( 'GFForms', 'auto_update_message' ), 9, 3 );
add_filter( 'plugin_auto_update_debug_string', array( 'GFForms', 'auto_update_debug_message' ), 10, 4 );
@@ -245,7 +244,7 @@ class GFForms {
*
* @var string $version The version number.
*/
public static $version = '2.8.11';
public static $version = '2.8.14';
/**
* Handles background upgrade tasks.
@@ -1911,7 +1910,7 @@ class GFForms {
} else if ( GFCommon::current_user_can_any( 'gravityforms_view_addons' ) ) {
$parent = array( 'name' => 'gf_addons', 'callback' => array( 'GFForms', 'addons_page' ) );
} else if ( GFCommon::current_user_can_any( 'gravityforms_system_status' ) ) {
$parent = array( 'name' => 'gf_system_status', 'callback' => array( 'GFForms', 'system_status_page' ) );
$parent = array( 'name' => 'gf_system_status', 'callback' => array( 'GFForms', 'system_status' ) );
} else if ( GFCommon::current_user_can_any( GFCommon::all_caps() ) ) {
$parent = array( 'name' => 'gf_help', 'callback' => array( 'GFForms', 'help_page' ) );
}
@@ -2125,7 +2124,7 @@ class GFForms {
$display_title = ! isset( $args['title'] ) || ! empty( $args['title'] ) ? true : false;
$display_description = ! isset( $args['description'] ) || ! empty( $args['description'] ) ? true : false;
$tabindex = isset( $args['tabindex'] ) ? absint( $args['tabindex'] ) : 0;
$theme = isset( $args['theme'] ) ? GFCommon::strip_all_tags_from_json_string( $args['theme'] ) : null;
$theme = isset( $args['theme'] ) ? sanitize_text_field( $args['theme'] ) : null;
$styles = isset( $args['styles'] ) ? GFCommon::strip_all_tags_from_json_string( $args['styles'] ) : null;
parse_str( rgpost( 'gform_field_values' ), $field_values );
@@ -6596,12 +6595,14 @@ class GFForms {
* access tables that are not valid for this version of Gravity Forms.
*
* @since 2.3
* @deprecated 2.8.13
*
* @param $query
*
* @return string
*/
public static function filter_query( $query ) {
_deprecated_function( __METHOD__, '2.8.13' );
global $wpdb;
if ( preg_match( "/$wpdb->prefix(rg_lead_detail|rg_lead_meta|rg_lead_notes|rg_lead|rg_form_meta|rg_form_view|rg_form|rg_incomplete_submissions)/", $query, $matches ) ) {
@@ -205,6 +205,7 @@ abstract class GFAddOn {
->set_form_css_properties( array( $this, 'theme_layer_form_css_properties' ) )
->set_styles( array( $this, 'theme_layer_styles' ) )
->set_scripts( array( $this, 'theme_layer_scripts' ) )
->set_capability( $this->get_form_settings_capabilities() )
->register();
add_action( 'gform_form_after_open', array( $this, 'output_third_party_styles' ), 998, 2 );
}
@@ -1644,8 +1645,8 @@ abstract class GFAddOn {
$caps = array();
// Add capabilities.
if ( ! empty( $this->_capabilities_form_settings ) && is_string( $this->_capabilities_form_settings ) ) {
$caps[ $this->_capabilities_form_settings ] = esc_html__( 'Form Settings', 'gravityforms' );
if ( ! empty( $this->get_form_settings_capabilities() ) && is_string( $this->get_form_settings_capabilities() ) ) {
$caps[ $this->get_form_settings_capabilities() ] = esc_html__( 'Form Settings', 'gravityforms' );
}
if ( ! empty( $this->_capabilities_uninstall ) && is_string( $this->_capabilities_uninstall ) ) {
$caps[ $this->_capabilities_uninstall ] = esc_html__( 'Uninstall', 'gravityforms' );
@@ -4174,6 +4175,15 @@ abstract class GFAddOn {
//-------------- Form settings ---------------------------------------------------
/**
* Get the capabilities required to access the form settings page.
*
* @return array
*/
public function get_form_settings_capabilities() {
return $this->_capabilities_form_settings;
}
/**
* Initializes form settings page
* Hooks up the required scripts and actions for the Form Settings page
@@ -4183,7 +4193,7 @@ abstract class GFAddOn {
$subview = rgget( 'subview' );
add_filter( 'gform_form_settings_menu', array( $this, 'add_form_settings_menu' ), 10, 2 );
if ( rgget( 'page' ) == 'gf_edit_forms' && $view == 'settings' && $subview == $this->get_slug() && $this->current_user_can_any( $this->_capabilities_form_settings ) ) {
if ( rgget( 'page' ) == 'gf_edit_forms' && $view == 'settings' && $subview == $this->get_slug() && $this->current_user_can_any( $this->get_form_settings_capabilities() ) ) {
require_once( GFCommon::get_base_path() . '/tooltips.php' );
add_action( 'gform_form_settings_page_' . $this->get_slug(), array( $this, 'form_settings_page' ) );
@@ -4214,7 +4224,7 @@ abstract class GFAddOn {
// Initialize new settings renderer.
$renderer = new Settings(
array(
'capability' => $this->_capabilities_form_settings,
'capability' => $this->get_form_settings_capabilities(),
'fields' => $sections,
'initial_values' => $this->get_form_settings( $form ),
'save_callback' => function( $values ) use ( $form ) {
@@ -4697,7 +4707,7 @@ abstract class GFAddOn {
'name' => $this->get_slug(),
'label' => $this->get_short_title(),
'query' => array( 'fid' => null ),
'capabilities' => $this->_capabilities_form_settings,
'capabilities' => $this->get_form_settings_capabilities(),
'icon' => $this->get_menu_icon(),
'icon_namespace' => $this->get_icon_namespace(),
);
@@ -5446,7 +5456,6 @@ abstract class GFAddOn {
// remove entry meta
$meta_table = version_compare( GFFormsModel::get_database_version(), '2.3-dev-1', '<' ) ? GFFormsModel::get_lead_meta_table_name() : GFFormsModel::get_entry_meta_table_name();
remove_filter( 'query', array( 'GFForms', 'filter_query' ) );
foreach ( $forms as $form ) {
$all_form_ids[] = $form->id;
$entry_meta = $this->get_entry_meta( array(), $form->id );
@@ -5457,7 +5466,6 @@ abstract class GFAddOn {
}
}
}
add_filter( 'query', array( 'GFForms', 'filter_query' ) );
//remove form settings
if ( ! empty( $all_form_ids ) ) {
@@ -1262,7 +1262,7 @@ abstract class GFFeedAddOn extends GFAddOn {
public function ajax_toggle_is_active() {
check_ajax_referer( 'feed_list', 'nonce' );
if ( ! $this->current_user_can_any( $this->_capabilities_form_settings ) ) {
if ( ! $this->current_user_can_any( $this->get_form_settings_capabilities() ) ) {
wp_send_json_error( array( 'message' => esc_html__( 'Access denied.', 'gravityforms' ) ) );
}
@@ -1279,7 +1279,7 @@ abstract class GFFeedAddOn extends GFAddOn {
public function ajax_save_feed_order() {
check_ajax_referer( 'gform_feed_order', 'nonce' );
if ( ! $this->current_user_can_any( $this->_capabilities_form_settings ) ) {
if ( ! $this->current_user_can_any( $this->get_form_settings_capabilities() ) ) {
return;
}
@@ -1371,7 +1371,7 @@ abstract class GFFeedAddOn extends GFAddOn {
// Initialize new settings renderer.
$renderer = new Settings(
array(
'capability' => $this->_capabilities_form_settings,
'capability' => $this->get_form_settings_capabilities(),
'initial_values' => rgar( $current_feed, 'meta' ),
'save_callback' => function( $values ) use ( $feed_id ) {
@@ -1584,7 +1584,7 @@ abstract class GFFeedAddOn extends GFAddOn {
check_admin_referer( $this->get_slug() . '_save_settings', '_' . $this->get_slug() . '_save_settings_nonce' );
if ( ! $this->current_user_can_any( $this->_capabilities_form_settings ) ) {
if ( ! $this->current_user_can_any( $this->get_form_settings_capabilities() ) ) {
GFCommon::add_error_message( esc_html__( "You don't have sufficient permissions to update the form settings.", 'gravityforms' ) );
return $feed_id;
}
@@ -76,7 +76,6 @@ class GF_Background_Upgrader extends GF_Background_Process {
}
if ( is_callable( $callback ) ) {
remove_filter( 'query', array( 'GFForms', 'filter_query' ) );
GFCommon::log_debug( sprintf( '%s(): Running callback: %s', __METHOD__, print_r( $callback, 1 ) ) );
$needs_more_time = call_user_func( $callback );
if ( $needs_more_time ) {
@@ -1379,8 +1379,6 @@ WHERE ln.id NOT IN
* Upgrade routine from gravity forms version 2.0.4.7 and below
*/
protected function post_upgrade_schema_2047() {
remove_filter( 'query', array( 'GFForms', 'filter_query' ) );
global $wpdb;
$versions = $this->get_versions();
@@ -33,6 +33,21 @@ class GF_Field_CAPTCHA extends GF_Field {
*/
private $secret_key;
/**
* The reCAPTCHA field constructor.
*
* @since 2.8.13
*
* @param $data
*/
public function __construct( $data = array() ) {
parent::__construct( $data );
if ( ! has_filter( 'gform_pre_render', array( __CLASS__, 'maybe_remove_recaptcha_v2' ) ) ) {
add_filter( 'gform_pre_render', array( __CLASS__, 'maybe_remove_recaptcha_v2' ), 11 );
}
}
public function get_form_editor_field_title() {
return esc_attr__( 'CAPTCHA', 'gravityforms' );
}
@@ -84,17 +99,58 @@ class GF_Field_CAPTCHA extends GF_Field {
*
* @since 2.8
*
* @return string
* @return string|array
*/
public function get_field_sidebar_messages() {
if ( $this->captchaType === 'math' || $this->captchaType === 'simple_captcha' || ( ! empty( $this->get_site_key() ) && ! empty( $this->get_secret_key() ) ) ) {
// If the field is a math or simple captcha, we don't need to display a warning.
if ( $this->captchaType === 'math' || $this->captchaType === 'simple_captcha' ) {
return '';
}
// If the reCAPTCHA keys are configured and Conversational Forms is active, we need to display a warning.
if ( ( ! empty( $this->get_site_key() ) && ! empty( $this->get_secret_key() ) ) ) {
if ( is_plugin_active( 'gravityformsconversationalforms/conversationalforms.php' ) ) {
return array(
'type' => 'notice',
'content' => esc_html__( 'The reCAPTCHA v2 field is not supported in Conversational Forms and will be removed, but will continue to work as expected in other contexts.', 'gravityforms' )
);
} else {
return '';
}
}
// If the reCAPTCHA keys are not configured, we need to display a warning.
// Translators: 1. Opening <a> tag with link to the Forms > Settings > reCAPTCHA page. 2. closing <a> tag.
return sprintf( __( 'To use reCAPTCHA v2 you must configure the site and secret keys on the %1$sreCAPTCHA Settings%2$s page.', 'gravityforms' ), "<a href='?page=gf_settings&subview=recaptcha' target='_blank'>", '</a>' );
}
/**
* Recaptcha v2 does not work in conversational forms, so we have to remove it.
*
* @since 2.8.13
*
* @param $form
*
* @return void
*/
public static function maybe_remove_recaptcha_v2( $form ) {
if ( ! function_exists( 'is_conversational_form' ) ) {
return $form;
}
if ( ! is_conversational_form( $form ) ) {
return $form;
}
foreach ( $form['fields'] as $key => $field ) {
if ( $field->type === 'captcha' && ( $field->captchaType === '' || $field->captchaType === 'captcha' ) ) {
unset( $form['fields'][ $key ] );
}
}
return $form;
}
/**
* Validate the reCAPTCHA field.
*
@@ -179,6 +235,13 @@ class GF_Field_CAPTCHA extends GF_Field {
* @return bool
*/
public function validate_recaptcha( $form ) {
if ( rgpost( 'gform_conversational_form' ) ) {
$hash = md5( $form['title'] . $form['id'] );
if ( $hash === $_POST['gform_conversational_form'] && is_plugin_active( 'gravityformsconversationalforms/conversationalforms.php' ) ) {
// This is a conversational form, and recaptcha v2 isn't supported
return true;
}
}
$response = $this->get_posted_recaptcha_response();
if ( ! ( $this->verify_decoded_response( $form, $response ) || $this->verify_recaptcha_response( $response ) ) ) {
@@ -62,7 +62,7 @@ class Text extends Base {
esc_attr( $this->input_type ),
esc_attr( $this->settings->get_input_name_prefix() ),
esc_attr( $this->name ),
$value ? esc_attr( htmlspecialchars( $value, ENT_QUOTES ) ) : '',
! rgblank( $value ) ? esc_attr( htmlspecialchars( $value, ENT_QUOTES ) ) : '',
$this->get_describer() ? sprintf( 'aria-describedby="%s"', $this->get_describer() ) : '',
implode( ' ', $this->get_attributes() ),
isset( $this->append ) ? sprintf( '<span class="gform-settings-field__text-append">%s</span>', esc_html( $this->append ) ) : '',
@@ -188,4 +188,18 @@ class Theme_Layer_Builder {
return $this;
}
/**
* Setter for capability.
*
* @param $capability
*
* @return $this
*/
public function set_capability( $capability ) {
$this->layer->set_capability( $capability );
return $this;
}
}
@@ -100,4 +100,8 @@ class Fluent_Theme_Layer extends GF_All_Access_Theme_Layer {
$this->icon = $icon;
}
public function set_capability( $capability ) {
$this->form_settings_capability = $capability;
}
}
@@ -78,13 +78,14 @@ class GF_Theme_Layers extends \GFAddOn {
}
$tabs[] = array(
'name' => $layer->name(),
'label' => $layer->short_title(),
'icon' => $layer->icon(),
'query' => array(
'name' => $layer->name(),
'label' => $layer->short_title(),
'icon' => $layer->icon(),
'query' => array(
'theme_layer' => $layer->name(),
'subview' => $this->get_slug(),
),
'capabilities' => $layer->get_form_settings_capability(),
);
}
@@ -103,5 +104,25 @@ class GF_Theme_Layers extends \GFAddOn {
public function form_settings_fields( $form ) {
return array();
}
/**
* Get the form settings capabilities.
*/
public function get_form_settings_capabilities() {
static $caps;
if ( empty( $caps ) ) {
$theme_layers = \GFForms::get_service_container()->get( GF_Theme_Layers_Provider::THEME_LAYERS );
foreach ( $theme_layers as $layer ) {
/**
* @var GF_Theme_Layer $layer
*/
$caps[ $layer->name() ] = $layer->get_form_settings_capability();
}
}
return rgar( $caps, rgget( 'theme_layer' ) );
}
}
@@ -21,6 +21,8 @@ abstract class GF_Theme_Layer {
protected $short_title;
protected $priority;
protected $form_settings_capability;
/**
* @var Definition_Engine[]
*/
@@ -142,4 +144,13 @@ abstract class GF_Theme_Layer {
return $this->icon;
}
/**
* Getter for form_settings_capability
*
* @return string
*/
public function get_form_settings_capability() {
return $this->form_settings_capability;
}
}
File diff suppressed because it is too large Load Diff