plugin updates
This commit is contained in:
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' => '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' => '4be5791b96ec32cbf1eb088e2234041d', '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' => '51611f92b865196a3851e8dbe254b31d', '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' => 'b2d752f8ab63822be2409ebf817de4cc', '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
@@ -1,3 +1,17 @@
|
||||
### 2.8.17 | 2024-08-26
|
||||
- Updated the form restriction logging statements to include the form ID.
|
||||
- Fixed an issue where the license key is not saved for some sites in a multisite/network installation.
|
||||
|
||||
### 2.8.16 | 2024-08-12
|
||||
- Added security enhancements.
|
||||
- Added unique aria labels to the main links on the form list, entry list, confirmation list, and notification list to improve accessibility.
|
||||
- Updated the licensing messages on the plugins page to be consistent with the settings page.
|
||||
- Updated the results page title to be unique for better accessibility.
|
||||
- Updates for WP 6.6 compatibility.
|
||||
- Fixed an issue where a number field with range has an invalid aria-describedby attribute when it fails validation.
|
||||
- Fixed issues with the choices flyout in the form editor in RTL languages.
|
||||
- Fixed an issue where a database error occurs during background processing if the site that queued the task is deleted.
|
||||
|
||||
### 2.8.15 | 2024-07-29
|
||||
- Added improvements to translator comments.
|
||||
- Added improvements for WordPress 6.6 compatibility.
|
||||
|
||||
@@ -2706,14 +2706,10 @@ Content-Type: text/html;
|
||||
*
|
||||
* @return bool True if current user can uninstall the plugin. False otherwise
|
||||
*/
|
||||
public static function current_user_can_uninstall( $caps = 'gravityforms_uninstall', $plugin_path = 'gravityforms/gravityforms.php' ) {
|
||||
|
||||
$is_multisite = function_exists( 'is_multisite' ) && is_multisite();
|
||||
$is_network_activated = is_plugin_active_for_network( $plugin_path );
|
||||
|
||||
public static function current_user_can_uninstall( $caps = 'gravityforms_uninstall', $plugin_path = GF_PLUGIN_BASENAME ) {
|
||||
|
||||
//If an addon is network activated, it can only be uninstalled by a super admin.
|
||||
if ( $is_multisite && $is_network_activated ) {
|
||||
if ( self::is_network_active( $plugin_path ) ) {
|
||||
return is_super_admin();
|
||||
} else {
|
||||
return self::current_user_can_any( $caps );
|
||||
@@ -2863,8 +2859,24 @@ Content-Type: text/html;
|
||||
return stripslashes( get_option( 'rg_gforms_message' ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the license key MD5.
|
||||
*
|
||||
* If this is a multisite installation, and the current site doesn't have a key saved, it will fallback to the network option containing the key from the main site.
|
||||
*
|
||||
* @since unknown
|
||||
* @since 2.8.17 Added the network option fallback.
|
||||
*
|
||||
* @return string|false
|
||||
*/
|
||||
public static function get_key() {
|
||||
return get_option( 'rg_gforms_key' );
|
||||
$key = get_option( GFForms::LICENSE_KEY_OPT );
|
||||
|
||||
if ( ! $key && ! is_main_site() ) {
|
||||
$key = get_network_option( null, GFForms::LICENSE_KEY_OPT );
|
||||
}
|
||||
|
||||
return $key;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -2946,13 +2958,22 @@ Content-Type: text/html;
|
||||
self::$license_info = $license_info;
|
||||
}
|
||||
|
||||
/**
|
||||
* If a license key doesn't exist, $license_info will be a WP_Error.
|
||||
* $license_info is potentially loaded from a serialized cache
|
||||
* value causing the need to validate it is correct type
|
||||
* before calling any of its methods.
|
||||
*/
|
||||
$is_valid_license_info = ( ! is_wp_error( $license_info ) && is_a( $license_info, Gravity_Forms\Gravity_Forms\License\GF_License_API_Response::class ) );
|
||||
|
||||
return array(
|
||||
'is_valid_key' => ! is_wp_error( $license_info ) && is_a( $license_info, Gravity_Forms\Gravity_Forms\License\GF_License_API_Response::class ) && $license_info->can_be_used(),
|
||||
'reason' => $license_info->get_error_message(),
|
||||
'version' => rgars( $plugins, 'gravityforms/version' ),
|
||||
'url' => rgars( $plugins, 'gravityforms/url' ),
|
||||
'is_error' => is_wp_error( $license_info ) || $license_info->has_errors(),
|
||||
'offerings' => $plugins,
|
||||
'is_valid_key' => $is_valid_license_info && $license_info->can_be_used(),
|
||||
'reason' => $license_info->get_error_message(),
|
||||
'version' => rgars( $plugins, 'gravityforms/version' ),
|
||||
'url' => rgars( $plugins, 'gravityforms/url' ),
|
||||
'is_error' => is_wp_error( $license_info ) || $license_info->has_errors(),
|
||||
'offerings' => $plugins,
|
||||
'status' => ( $is_valid_license_info ) ? $license_info->get_status() : '',
|
||||
);
|
||||
}
|
||||
|
||||
@@ -7719,6 +7740,27 @@ Content-Type: text/html;
|
||||
GFCache::set( GFCache::KEY_CRON_EVENTS, $events, true );
|
||||
}
|
||||
|
||||
/**
|
||||
* Determines if this is a network activated multisite installation.
|
||||
*
|
||||
* @since 2.8.17
|
||||
*
|
||||
* @param string $plugin Path to the plugin file relative to the plugins directory.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public static function is_network_active( $plugin = GF_PLUGIN_BASENAME ) {
|
||||
if ( ! is_multisite() ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if ( ! function_exists( 'is_plugin_active_for_network' ) ) {
|
||||
require_once( ABSPATH . '/wp-admin/includes/plugin.php' );
|
||||
}
|
||||
|
||||
return is_plugin_active_for_network( $plugin );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class GFCategoryWalker extends Walker {
|
||||
|
||||
@@ -1024,7 +1024,8 @@ final class GF_Entry_List_Table extends WP_List_Table {
|
||||
|
||||
if ( $column_id == $primary ) {
|
||||
$edit_url = $this->get_detail_url( $entry );
|
||||
$column_value = '<a aria-label="' . esc_attr__( 'View this entry', 'gravityforms' ) . '" href="' . $edit_url . '">' . $value . '</a>';
|
||||
$aria_label = sprintf( esc_html__( 'View entry number %s', 'gravityforms' ), $entry['id'] );
|
||||
$column_value = '<a aria-label="' . esc_attr__( $aria_label ) . '" href="' . $edit_url . '">' . $value . '</a>';
|
||||
|
||||
/**
|
||||
* Used to inject markup and replace the value of any primary/first column in the entry list grid.
|
||||
@@ -1039,7 +1040,7 @@ final class GF_Entry_List_Table extends WP_List_Table {
|
||||
*/
|
||||
$column_value = apply_filters( 'gform_entries_primary_column_filter', $column_value, $form_id, $field_id, $entry, $query_string, $edit_url, $value );
|
||||
|
||||
// Warning ignored becuase output is expected to be escaped higher up in the chain.
|
||||
// Warning ignored because output is expected to be escaped higher up in the chain.
|
||||
// phpcs:ignore
|
||||
echo $column_value;
|
||||
} else {
|
||||
|
||||
@@ -4543,7 +4543,7 @@ class GFFormDisplay {
|
||||
if ( $entry_count >= $limit ) {
|
||||
$error = empty( $form['limitEntriesMessage'] ) ? "<div class='gf_submission_limit_message'><p>" . esc_html__( 'Sorry. This form is no longer accepting new submissions.', 'gravityforms' ) . '</p></div>' : '<p>' . GFCommon::gform_do_shortcode( $form['limitEntriesMessage'] ) . '</p>';
|
||||
self::set_submission_if_null( $form_id, 'form_restriction_error', $error );
|
||||
GFCommon::log_debug( __METHOD__ . sprintf( '(): Entry limit reached. Limit: %d; Count: %d.', $limit, $entry_count ) );
|
||||
GFCommon::log_debug( __METHOD__ . sprintf( '(): Form (#%d) entry limit reached. Limit: %d; Count: %d.', $form_id, $limit, $entry_count ) );
|
||||
|
||||
return $error;
|
||||
}
|
||||
@@ -4564,13 +4564,13 @@ class GFFormDisplay {
|
||||
if ( ! empty( $form['scheduleStart'] ) && $now < $timestamp_start ) {
|
||||
$error = empty( $form['schedulePendingMessage'] ) ? '<p>' . esc_html__( 'This form is not yet available.', 'gravityforms' ) . '</p>' : '<p>' . GFCommon::gform_do_shortcode( $form['schedulePendingMessage'] ) . '</p>';
|
||||
self::set_submission_if_null( $form['id'], 'form_restriction_error', $error );
|
||||
GFCommon::log_debug( __METHOD__ . sprintf( '(): The form is not yet available. Scheduled for: %d; Now: %d.', $timestamp_start, $now ) );
|
||||
GFCommon::log_debug( __METHOD__ . sprintf( '(): The form (#%d) is not yet available. Scheduled for: %d; Now: %d.', rgar( $form, 'id' ), $timestamp_start, $now ) );
|
||||
|
||||
return $error;
|
||||
} elseif ( ! empty( $form['scheduleEnd'] ) && $now > $timestamp_end ) {
|
||||
$error = empty( $form['scheduleMessage'] ) ? '<p>' . esc_html__( 'Sorry. This form is no longer available.', 'gravityforms' ) . '</p>' : '<p>' . GFCommon::gform_do_shortcode( $form['scheduleMessage'] ) . '</p>';
|
||||
self::set_submission_if_null( $form['id'], 'form_restriction_error', $error );
|
||||
GFCommon::log_debug( __METHOD__ . sprintf( '(): The form is no longer available. Ended: %d; Now: %d.', $timestamp_end, $now ) );
|
||||
GFCommon::log_debug( __METHOD__ . sprintf( '(): The form (#%d) is no longer available. Ended: %d; Now: %d.', rgar( $form, 'id' ), $timestamp_end, $now ) );
|
||||
|
||||
return $error;
|
||||
}
|
||||
|
||||
@@ -626,7 +626,7 @@ class GF_Form_List_Table extends WP_List_Table {
|
||||
}
|
||||
|
||||
function column_title( $form ) {
|
||||
echo '<strong><a href="?page=gf_edit_forms&id='. absint( $form->id ) .'">' . esc_html( $form->title ) . '</a></strong>';
|
||||
echo '<strong><a href="?page=gf_edit_forms&id='. absint( $form->id ) .'" aria-label="' . esc_attr( $form->title ) . ' ' . esc_attr( '(Edit)', 'gravityforms' ) . '">' . esc_html( $form->title ) . '</a></strong>';
|
||||
}
|
||||
|
||||
function column_id( $form ) {
|
||||
|
||||
@@ -6279,7 +6279,7 @@ class GFFormsModel {
|
||||
|
||||
$new_key = trim( $new_key );
|
||||
$new_key_md5 = md5( $new_key );
|
||||
$previous_key = get_option( 'rg_gforms_key' );
|
||||
$previous_key = get_option( GFForms::LICENSE_KEY_OPT );
|
||||
|
||||
/**
|
||||
* @var License\GF_License_API_Connector $license_connector
|
||||
@@ -6291,15 +6291,7 @@ class GFFormsModel {
|
||||
delete_option( 'gform_version_info' );
|
||||
|
||||
if ( empty( $new_key ) ) {
|
||||
|
||||
if ( is_multisite() && is_main_site() ) {
|
||||
$sites = get_sites();
|
||||
foreach ( $sites as $site ) {
|
||||
delete_blog_option( $site->blog_id, 'rg_gforms_key' );
|
||||
}
|
||||
}
|
||||
|
||||
delete_option( 'rg_gforms_key' );
|
||||
self::update_license_key( '' );
|
||||
|
||||
// Unlink the site with the license key on Gravity API.
|
||||
$license_connector->update_site_registration( '' );
|
||||
@@ -8233,21 +8225,44 @@ class GFFormsModel {
|
||||
* Updates the license key, If multisite, it updates the license key for all sites in the network.
|
||||
*
|
||||
* @since 2.7
|
||||
* @since 2.8.17 Updated to also store the key as a network option.
|
||||
*
|
||||
* @param string $license The license key.
|
||||
* @param string $license The license key MD5.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public static function update_license_key( $license ) {
|
||||
if ( is_multisite() && is_main_site() ) {
|
||||
$sites = get_sites();
|
||||
foreach ( $sites as $site ) {
|
||||
update_blog_option( $site->blog_id, 'rg_gforms_key', $license );
|
||||
update_blog_option( $site->blog_id, 'gform_pending_installation', false );
|
||||
if ( is_main_site() && GFCommon::is_network_active() ) {
|
||||
if ( $license ) {
|
||||
update_network_option( null, GFForms::LICENSE_KEY_OPT, $license );
|
||||
} else {
|
||||
delete_network_option( null, GFForms::LICENSE_KEY_OPT );
|
||||
}
|
||||
|
||||
$ids = get_sites( array(
|
||||
'fields' => 'ids',
|
||||
'number' => 0,
|
||||
'site__not_in' => array( get_current_blog_id() ),
|
||||
) );
|
||||
|
||||
foreach ( $ids as $id ) {
|
||||
switch_to_blog( $id );
|
||||
if ( $license ) {
|
||||
update_option( GFForms::LICENSE_KEY_OPT, $license );
|
||||
delete_option( 'gform_pending_installation' );
|
||||
delete_option( 'rg_gforms_message' );
|
||||
} else {
|
||||
delete_option( GFForms::LICENSE_KEY_OPT );
|
||||
}
|
||||
restore_current_blog();
|
||||
}
|
||||
}
|
||||
|
||||
update_option( 'rg_gforms_key', $license );
|
||||
if ( $license ) {
|
||||
update_option( GFForms::LICENSE_KEY_OPT, $license );
|
||||
} else {
|
||||
delete_option( GFForms::LICENSE_KEY_OPT );
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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.15
|
||||
Version: 2.8.17
|
||||
Requires at least: 4.0
|
||||
Requires PHP: 5.6
|
||||
Author: Gravity Forms
|
||||
@@ -31,6 +31,7 @@ along with this program. If not, see http://www.gnu.org/licenses.
|
||||
|
||||
use Gravity_Forms\Gravity_Forms\TranslationsPress_Updater;
|
||||
use Gravity_Forms\Gravity_Forms\Libraries\Dom_Parser;
|
||||
use Gravity_Forms\Gravity_Forms\License\GF_License_Statuses;
|
||||
|
||||
//------------------------------------------------------------------------------------------------------------------
|
||||
//---------- Gravity Forms License Key -----------------------------------------------------------------------------
|
||||
@@ -244,7 +245,7 @@ class GFForms {
|
||||
*
|
||||
* @var string $version The version number.
|
||||
*/
|
||||
public static $version = '2.8.15';
|
||||
public static $version = '2.8.17';
|
||||
|
||||
/**
|
||||
* Handles background upgrade tasks.
|
||||
@@ -253,6 +254,13 @@ class GFForms {
|
||||
*/
|
||||
public static $background_upgrader = null;
|
||||
|
||||
/**
|
||||
* The option name used to store the license key.
|
||||
*
|
||||
* @since 2.8.17
|
||||
*/
|
||||
const LICENSE_KEY_OPT = 'rg_gforms_key';
|
||||
|
||||
/**
|
||||
* Runs after Gravity Forms is loaded.
|
||||
*
|
||||
@@ -1947,7 +1955,7 @@ class GFForms {
|
||||
$form_title = rgar( $form, 'title', __( 'Form Not Found', 'gravityforms' ) );
|
||||
|
||||
switch ( $page ) {
|
||||
case 'new_form':
|
||||
case 'new_form':
|
||||
case 'form_list':
|
||||
$filter_title = '';
|
||||
$filter = rgget( 'filter' );
|
||||
@@ -1977,7 +1985,7 @@ class GFForms {
|
||||
|
||||
case 'form_editor':
|
||||
$admin_title = sprintf( '%1$s ‹ %2$s', esc_html( $form_title ), esc_html( $admin_title ) );
|
||||
break;
|
||||
break;
|
||||
|
||||
case 'confirmation':
|
||||
$page_title = __( 'Confirmations', 'gravityforms' );
|
||||
@@ -1990,27 +1998,27 @@ class GFForms {
|
||||
|
||||
$admin_title = sprintf( '%1$s ‹ %2$s ‹ %3$s', esc_html( $page_title ), esc_html( $form_title ), esc_html( $admin_title ) );
|
||||
break;
|
||||
|
||||
|
||||
case 'entry_list':
|
||||
$filter = rgget( 'filter' );
|
||||
|
||||
if ( $filter === 'star' ) {
|
||||
/* translators: Starred entry list page title. 1. form title */
|
||||
/* translators: Starred entry list page title. 1. form title */
|
||||
$form_title = sprintf( __( 'Starred — %1$s', 'gravityforms' ), esc_html( $form_title ) );
|
||||
}
|
||||
|
||||
if ( $filter === 'unread' ) {
|
||||
/* translators: Unread entry list page title. 1. form title */
|
||||
/* translators: Unread entry list page title. 1. form title */
|
||||
$form_title = sprintf( __( 'Unread — %1$s', 'gravityforms' ), esc_html( $form_title ) );
|
||||
}
|
||||
|
||||
if ( $filter === 'spam' ) {
|
||||
/* translators: Active entry list page title. 1. form title */
|
||||
/* translators: Active entry list page title. 1. form title */
|
||||
$form_title = sprintf( __( 'Spam — %1$s', 'gravityforms' ), esc_html( $form_title ) );
|
||||
}
|
||||
|
||||
if ( $filter === 'trash' ) {
|
||||
/* translators: Trash entry list page title. 1. form title */
|
||||
/* translators: Trash entry list page title. 1. form title */
|
||||
$form_title = sprintf( __( 'Trash — %1$s', 'gravityforms' ), esc_html( $form_title ) );
|
||||
}
|
||||
|
||||
@@ -2022,13 +2030,13 @@ class GFForms {
|
||||
|
||||
$admin_title = sprintf( '%1$s ‹ %2$s', esc_html( $form_title ), esc_html( $admin_title ) );
|
||||
break;
|
||||
|
||||
|
||||
case 'entry_detail':
|
||||
case 'entry_detail_edit':
|
||||
require_once( GFCommon::get_base_path() . '/entry_detail.php' );
|
||||
|
||||
|
||||
$entry = GFEntryDetail::get_current_entry();
|
||||
|
||||
|
||||
if ( ! is_wp_error( $entry ) && isset( $entry['id'] ) ) {
|
||||
/* translators: Single entry page title. 1: entry ID, 2: form title, 3: admin title. */
|
||||
$admin_title = sprintf( __( 'Entry # %1$d ‹ %2$s ‹ %3$s', 'gravityforms' ), esc_html( $entry['id'] ), esc_html( $form_title ), esc_html( $admin_title ) );
|
||||
@@ -2050,7 +2058,7 @@ class GFForms {
|
||||
$page_title = __( 'Notifications', 'gravityforms' );
|
||||
$admin_title = sprintf( '%1$s ‹ %2$s ‹ %3$s ‹ %4$s', esc_html( $notification_name ), esc_html( $page_title ), esc_html( $form_title ), esc_html( $admin_title ) );
|
||||
break;
|
||||
|
||||
|
||||
case 'settings':
|
||||
$page_title = __( 'Settings', 'gravityforms' );
|
||||
$subview = rgget( 'subview' );
|
||||
@@ -2084,11 +2092,11 @@ class GFForms {
|
||||
case 'import_form':
|
||||
/* Translators: Import form page title. 1: Admin title. */
|
||||
$admin_title = sprintf( __( 'Import Forms ‹ %1$s', 'gravityforms' ), esc_html( $admin_title ) );
|
||||
break;
|
||||
break;
|
||||
|
||||
case 'export_entry':
|
||||
/* Translators: Export Entry page title. 1: Admin title. */
|
||||
$admin_title = sprintf( __( 'Export Entries ‹ %1$s', 'gravityforms' ), esc_html( $admin_title ) );
|
||||
$admin_title = sprintf( __( 'Export Entries ‹ %1$s', 'gravityforms' ), esc_html( $admin_title ) );
|
||||
break;
|
||||
|
||||
case 'updates':
|
||||
@@ -2098,7 +2106,7 @@ class GFForms {
|
||||
|
||||
case 'system_status':
|
||||
$subview = rgget( 'subview' );
|
||||
$page_title = __( 'System Status', 'gravityforms' );
|
||||
$page_title = __( 'System Status', 'gravityforms' );
|
||||
|
||||
if ( rgblank( $subview ) ) {
|
||||
/* Translators: System report page title. 1: Admin title. */
|
||||
@@ -2109,10 +2117,10 @@ class GFForms {
|
||||
|
||||
case 'form_settings':
|
||||
case 'personal_data':
|
||||
default:
|
||||
if ( rgget( 'view' ) === 'settings' ) {
|
||||
default:
|
||||
if ( rgget( 'view' ) === 'settings' ) {
|
||||
require_once( GFCommon::get_base_path() . '/form_settings.php' );
|
||||
|
||||
|
||||
$form_id = rgget( 'id' );
|
||||
$setting_tabs = GFFormSettings::get_tabs( $form_id );
|
||||
$page_title = '';
|
||||
@@ -2120,12 +2128,12 @@ class GFForms {
|
||||
|
||||
if ( ! $subview || $subview === '' && ! empty( $setting_tabs ) ) {
|
||||
$subview = rgar( $setting_tabs[0], 'name', 'settings' );
|
||||
}
|
||||
}
|
||||
|
||||
foreach ( $setting_tabs as $tab ) {
|
||||
if ( $tab['name'] === $subview || ( $subview === 'gf_theme_layers' && rgget( 'theme_layer' ) === $tab['name'] ) ) {
|
||||
$page_title = $tab['label'];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( $page_title ) {
|
||||
@@ -2134,7 +2142,7 @@ class GFForms {
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
return $admin_title;
|
||||
}
|
||||
@@ -2518,8 +2526,13 @@ class GFForms {
|
||||
}
|
||||
|
||||
$valid_key = rgar( GFCommon::get_version_info(), 'is_valid_key' );
|
||||
$status = rgar( GFCommon::get_version_info(), 'status' );
|
||||
if ( 'valid_key' === $status ) {
|
||||
$status = '';
|
||||
}
|
||||
|
||||
$message = '';
|
||||
|
||||
$message = '';
|
||||
// Display the message only for a multisite network. A single site install doesn't need it (WP handles it).
|
||||
if ( ( is_multisite() && ! is_network_admin() ) && version_compare( $version, rgar( $version_info, 'version' ), '<' ) ) {
|
||||
$changelog_url = wp_nonce_url( self_admin_url( 'admin-ajax.php?action=gf_get_changelog&plugin=' . $slug . '&TB_iframe=true&width=640&height=808' ) );
|
||||
@@ -2571,7 +2584,25 @@ class GFForms {
|
||||
if ( $unregistered_license_message_env ) {
|
||||
$message .= $unregistered_license_message_env;
|
||||
} else {
|
||||
$message .= sprintf( esc_html__( '%sRegister%s your copy of Gravity Forms to receive access to automatic upgrades and support. Need a license key? %sPurchase one now%s.', 'gravityforms' ), '<a href="' . admin_url() . 'admin.php?page=gf_settings">', '</a>', '<a href="https://www.gravityforms.com">', '</a>' );
|
||||
// If the status is blank, then the license doesn't exists.
|
||||
$status = ( ! rgblank( $status ) ) ? $status : GF_License_Statuses::NO_LICENSE_KEY;
|
||||
$message .= \Gravity_Forms\Gravity_Forms\License\GF_License_Statuses::get_message_for_code( $status );
|
||||
}
|
||||
} else {
|
||||
// A key can be valid but still return a code for the site being revoked or the license being exired.
|
||||
if ( ! rgblank( $status ) ) {
|
||||
$message .= \Gravity_Forms\Gravity_Forms\License\GF_License_Statuses::get_message_for_code( $status );
|
||||
}
|
||||
|
||||
// Adds message for add-ons that are not available for the current license level.
|
||||
if ( false === rgar( $version_info, 'is_available' ) ) {
|
||||
$message .= sprintf(
|
||||
/* translators: %1$s Plugin name %2$s and %3$s are link tag markup */
|
||||
__( 'The %1$s is not available with the configured license; please visit the %2$sGravity Forms website%3$s to verify your license. ', 'gravityforms' ),
|
||||
esc_html( $plugin_data['Name'] ),
|
||||
'<a href="https://www.gravityforms.com/my-account/licenses/?utm_source=gf-admin&utm_medium=purchase-link&utm_campaign=license-enforcement" target="_blank">',
|
||||
'</a>'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2915,7 +2946,6 @@ class GFForms {
|
||||
wp_register_script( 'gform_chosen', $base_url . "/js/chosen.jquery.min.js", array( 'jquery' ), $version );
|
||||
wp_register_script( 'gform_selectwoo', $base_url . "/js/vendor/selectWoo.full.js", array( 'jquery' ), $version );
|
||||
wp_register_script( 'gform_simplebar', $base_url . "/js/vendor/simplebar.js", array( 'jquery' ), $version );
|
||||
wp_register_script( 'gform_promises_polyfill', 'https://cdn.jsdelivr.net/npm/promise-polyfill@8/dist/polyfill.min.js', array(), $version );
|
||||
wp_register_script( 'gform_conditional_logic', $base_url . "/js/conditional_logic{$min}.js", array(
|
||||
'jquery',
|
||||
'gform_gravityforms'
|
||||
@@ -2933,7 +2963,6 @@ class GFForms {
|
||||
), $version, true );
|
||||
wp_register_script( 'gform_form_editor_conditional_flyout', $base_url . "/js/components/form_editor/conditional_flyout/conditional_flyout{$min}.js", array(
|
||||
'jquery',
|
||||
'gform_promises_polyfill',
|
||||
'gform_gravityforms',
|
||||
), $version );
|
||||
wp_register_script( 'gform_form_admin', $base_url . "/js/form_admin{$min}.js", array(
|
||||
|
||||
@@ -51,6 +51,8 @@ if ( ! class_exists( 'GFResults' ) ) {
|
||||
require_once( GFCommon::get_base_path() . '/tooltips.php' );
|
||||
add_filter( 'gform_tooltips', array( $this, 'add_tooltips' ) );
|
||||
|
||||
add_filter( 'admin_title', array( $this, 'set_unique_page_title' ), 100, 2 );
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -886,6 +888,32 @@ if ( ! class_exists( 'GFResults' ) ) {
|
||||
) ) ? GFSurvey::get_field_score( $field, $entry ) : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets a unique page title to the results page based on the title
|
||||
* and the form the user is viewing.
|
||||
*
|
||||
* @since 2.8.16
|
||||
*
|
||||
* @filter admin_title
|
||||
*
|
||||
* @param string $admin_title The page title with extra context added.
|
||||
* @param string $title The original page title.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function set_unique_page_title( $admin_title, $title ) {
|
||||
$form_id = rgget( 'id' );
|
||||
if ( ! $form_id ) {
|
||||
$forms = RGFormsModel::get_forms( null, 'title' );
|
||||
$form_id = ( ! empty( $forms ) ) ? $forms[0]->id : '';
|
||||
}
|
||||
|
||||
$form = GFAPI::get_form( $form_id );
|
||||
$form_title = rgar( $form, 'title', esc_html__( 'Form Not Found', 'gravityforms' ) );
|
||||
$admin_title = sprintf( '%1$s ‹ %2$s ‹ %3$s', esc_html( $this->_title ), esc_html( $form_title ), esc_html( $admin_title ) );
|
||||
|
||||
return $admin_title;
|
||||
}
|
||||
|
||||
public static function get_default_field_results( $form_id, $field, $search_criteria, &$offset, $page_size, &$more_remaining = false ) {
|
||||
$field_results = '';
|
||||
|
||||
@@ -1104,10 +1104,14 @@ class GFConfirmationTable extends WP_List_Table {
|
||||
unset( $actions['delete'] );
|
||||
}
|
||||
|
||||
|
||||
$aria_label = sprintf(
|
||||
/* translators: %s: Confirmation name */
|
||||
__( '%s (Edit)', 'gravityforms' ),
|
||||
$item['name']
|
||||
);
|
||||
?>
|
||||
|
||||
<a href="<?php echo esc_url( $edit_url ); ?>"><strong><?php echo esc_html( rgar( $item, 'name' ) ); ?></strong></a>
|
||||
<a href="<?php echo esc_url( $edit_url ); ?>" aria-label="<?php echo esc_attr( $aria_label ); ?>"><strong><?php echo esc_html( rgar( $item, 'name' ) ); ?></strong></a>
|
||||
<div class="row-actions">
|
||||
|
||||
<?php
|
||||
|
||||
@@ -68,7 +68,7 @@ class GF_Upgrade {
|
||||
$this->install();
|
||||
|
||||
// Show installation wizard for all new installations as long as the key wasn't already set e.g. by the CLI.
|
||||
if ( ! get_option( 'rg_gforms_key' ) ) {
|
||||
if ( ! GFCommon::get_key() ) {
|
||||
update_option( 'gform_pending_installation', true );
|
||||
}
|
||||
} elseif ( $this->is_downgrading() ) {
|
||||
@@ -156,6 +156,7 @@ class GF_Upgrade {
|
||||
$this->test_auto_increment();
|
||||
|
||||
$this->sync_auto_updates( $from_db_version );
|
||||
$this->set_license_network_option();
|
||||
|
||||
// Start upgrade routine
|
||||
if ( $force_upgrade || ! ( defined( 'GFORM_AUTO_DB_MIGRATION_DISABLED' ) && GFORM_AUTO_DB_MIGRATION_DISABLED ) ) {
|
||||
@@ -165,6 +166,38 @@ class GF_Upgrade {
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Ensures the network option for the license key is set.
|
||||
*
|
||||
* @since 2.8.17
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function set_license_network_option() {
|
||||
if ( ! GFCommon::is_network_active() ) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ( ! is_main_site() ) {
|
||||
delete_option( 'gform_pending_installation' );
|
||||
delete_option( 'rg_gforms_message' );
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
$key = get_network_option( null, GFForms::LICENSE_KEY_OPT );
|
||||
if ( $key ) {
|
||||
return;
|
||||
}
|
||||
|
||||
$key = GFCommon::get_key();
|
||||
if ( ! $key ) {
|
||||
return;
|
||||
}
|
||||
|
||||
update_network_option( null, GFForms::LICENSE_KEY_OPT, $key );
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates the WP auto_update_plugins option to match the background updates setting.
|
||||
*
|
||||
|
||||
@@ -262,7 +262,7 @@ class GF_Field_Number extends GF_Field {
|
||||
$invalid_attribute = $this->failed_validation ? 'aria-invalid="true"' : 'aria-invalid="false"';
|
||||
|
||||
$range_message = $this->get_range_message();
|
||||
$describedby_extra_id = empty( $range_message ) ? array() : array( "gfield_instruction_{$this->formId}_{$this->id}" );
|
||||
$describedby_extra_id = empty( $range_message && ! $this->failed_validation ) ? array() : array( "gfield_instruction_{$this->formId}_{$this->id}" );
|
||||
$aria_describedby = $this->get_aria_describedby( $describedby_extra_id );
|
||||
|
||||
$autocomplete_attribute = $this->enableAutocomplete ? $this->get_field_autocomplete_attribute() : '';
|
||||
|
||||
@@ -97,6 +97,10 @@ if ( ! class_exists( 'GF_Background_Process' ) ) {
|
||||
|
||||
add_action( $this->cron_hook_identifier, array( $this, 'handle_cron_healthcheck' ) );
|
||||
add_filter( 'cron_schedules', array( $this, 'schedule_cron_healthcheck' ) );
|
||||
add_action( 'wp_delete_site', array( $this, 'delete_site_batches' ) );
|
||||
add_action( 'make_spam_blog', array( $this, 'delete_site_batches' ) );
|
||||
add_action( 'archive_blog', array( $this, 'delete_site_batches' ) );
|
||||
add_action( 'make_delete_blog', array( $this, 'delete_site_batches' ) );
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -172,6 +176,7 @@ if ( ! class_exists( 'GF_Background_Process' ) ) {
|
||||
$key = $this->generate_key();
|
||||
|
||||
if ( ! empty( $this->data ) ) {
|
||||
GFCommon::log_debug( sprintf( '%s(): Saving batch %s. Tasks: %d.', __METHOD__, $key, count( $this->data ) ) );
|
||||
$data = array(
|
||||
'blog_id' => get_current_blog_id(),
|
||||
'data' => $this->data,
|
||||
@@ -423,6 +428,12 @@ if ( ! class_exists( 'GF_Background_Process' ) ) {
|
||||
if ( is_multisite() ) {
|
||||
$current_blog_id = get_current_blog_id();
|
||||
if ( $current_blog_id !== $batch->blog_id ) {
|
||||
if ( ! $this->is_valid_blog( $batch->blog_id ) ) {
|
||||
GFCommon::log_debug( sprintf( '%s(): Blog #%s is no longer valid for batch %s.', __METHOD__, $batch->blog_id, $batch->key ) );
|
||||
$this->delete_batches( $batch->blog_id );
|
||||
continue;
|
||||
}
|
||||
|
||||
$this->spawn_multisite_child_process( $batch->blog_id );
|
||||
if ( defined( 'DOING_CRON' ) && DOING_CRON ) {
|
||||
// Switch back to the current blog and return so the other tasks queued in this process can be run.
|
||||
@@ -721,32 +732,9 @@ if ( ! class_exists( 'GF_Background_Process' ) ) {
|
||||
* @return false|int
|
||||
*/
|
||||
public function clear_queue( $all_blogs_in_network = false ) {
|
||||
global $wpdb;
|
||||
|
||||
$table = $wpdb->options;
|
||||
$column = 'option_name';
|
||||
|
||||
if ( is_multisite() ) {
|
||||
$table = $wpdb->sitemeta;
|
||||
$column = 'meta_key';
|
||||
}
|
||||
|
||||
$key = $this->identifier . '_batch_';
|
||||
|
||||
if ( ! $all_blogs_in_network ) {
|
||||
$key .= 'blog_id_' . get_current_blog_id() . '_';
|
||||
}
|
||||
|
||||
$key = $wpdb->esc_like( $key ) . '%';
|
||||
|
||||
$result = $wpdb->query( $wpdb->prepare( "
|
||||
DELETE FROM {$table}
|
||||
WHERE {$column} LIKE %s
|
||||
", $key ) );
|
||||
|
||||
$this->data = array();
|
||||
|
||||
return $result;
|
||||
return $this->delete_batches( $all_blogs_in_network );
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -782,5 +770,76 @@ if ( ! class_exists( 'GF_Background_Process' ) ) {
|
||||
), $form, $entry );
|
||||
}
|
||||
|
||||
/**
|
||||
* Determines if the specified blog is suitable for batch processing.
|
||||
*
|
||||
* @since 2.8.16
|
||||
*
|
||||
* @param int $blog_id The blog ID.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function is_valid_blog( $blog_id ) {
|
||||
$site = get_site( $blog_id );
|
||||
|
||||
return $site instanceof WP_Site && ! $site->deleted && ! $site->archived && ! $site->spam;
|
||||
}
|
||||
|
||||
/**
|
||||
* Deletes the site batches when the site is deleted.
|
||||
*
|
||||
* @since 2.8.16
|
||||
*
|
||||
* @param WP_Site|int $old_site The deleted site object or ID.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function delete_site_batches( $old_site ) {
|
||||
$blog_id = is_object( $old_site ) ? $old_site->blog_id : $old_site;
|
||||
$this->delete_batches( $blog_id );
|
||||
}
|
||||
|
||||
/**
|
||||
* Deletes batches from the database.
|
||||
*
|
||||
* @since 2.8.16
|
||||
*
|
||||
* @param bool|int $all_blogs_in_network True to delete batches for all blogs. False to delete batches for the current blog. A blog ID to delete batches for the specified blog.
|
||||
*
|
||||
* @return bool|int
|
||||
*/
|
||||
public function delete_batches( $all_blogs_in_network = false ) {
|
||||
global $wpdb;
|
||||
|
||||
if ( is_multisite() ) {
|
||||
$table = $wpdb->sitemeta;
|
||||
$column = 'meta_key';
|
||||
} else {
|
||||
$table = $wpdb->options;
|
||||
$column = 'option_name';
|
||||
}
|
||||
|
||||
$key = $this->identifier . '_batch_';
|
||||
|
||||
if ( is_bool( $all_blogs_in_network ) ) {
|
||||
$blog_id = $all_blogs_in_network ? 0 : get_current_blog_id();
|
||||
} else {
|
||||
$blog_id = absint( $all_blogs_in_network );
|
||||
if ( ! $blog_id ) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if ( $blog_id ) {
|
||||
$key .= 'blog_id_' . $blog_id . '_';
|
||||
}
|
||||
|
||||
$result = $wpdb->query( $wpdb->prepare( "DELETE FROM {$table} WHERE {$column} LIKE %s", $wpdb->esc_like( $key ) . '%' ) );
|
||||
|
||||
GFCommon::log_debug( sprintf( '%s(): %d batch(es) deleted with prefix %s.', __METHOD__, $result, $key ) );
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,6 +20,7 @@ class GF_License_Statuses {
|
||||
const URL_CHANGED = 'gravityapi_site_url_changed';
|
||||
const MAX_SITES_EXCEEDED = 'gravityapi_exceeds_number_of_sites';
|
||||
const MULTISITE_NOT_ALLOWED = 'gravityapi_multisite_not_allowed';
|
||||
const NO_LICENSE_KEY = 'no_license_key';
|
||||
const NO_DATA = 'rest_no_route';
|
||||
|
||||
const USABILITY_VALID = 'success';
|
||||
@@ -39,27 +40,35 @@ class GF_License_Statuses {
|
||||
|
||||
$general_invalid_message = sprintf(
|
||||
/* translators: %1s and %2s are link tag markup */
|
||||
__( 'The license key entered is incorrect; please visit the %1$sGravity Forms website%2$s to verify your license.', 'gravityforms' ),
|
||||
__( 'The license key entered is incorrect; please visit the %1$sGravity Forms website%2$s to verify your license. ', 'gravityforms' ),
|
||||
'<a href="https://www.gravityforms.com/my-account/licenses/?utm_source=gf-admin&utm_medium=purchase-link&utm_campaign=license-enforcement" target="_blank">',
|
||||
'</a>'
|
||||
);
|
||||
|
||||
$map = array(
|
||||
self::VALID_KEY => __( 'Your license key has been successfully validated.', 'gravityforms' ),
|
||||
self::VALID_KEY => __( 'Your license key has been successfully validated. ', 'gravityforms' ),
|
||||
self::SITE_REVOKED => sprintf(
|
||||
/* translators: %1s and %2s are link tag markup */
|
||||
__( 'The license key entered has been revoked; please check its status in your %1$sGravity Forms account.%2$s', 'gravityforms' ),
|
||||
__( 'The license key entered has been revoked; please check its status in your %1$sGravity Forms account.%2$s ', 'gravityforms' ),
|
||||
'<a href="https://www.gravityforms.com/my-account/licenses/?utm_source=gf-admin&utm_medium=account-link-revoked&utm_campaign=license-enforcement" target="_blank">',
|
||||
'</a>'
|
||||
),
|
||||
self::MAX_SITES_EXCEEDED => __( 'This license key has already been activated on its maximum number of sites; please upgrade your license.', 'gravityforms' ),
|
||||
self::MULTISITE_NOT_ALLOWED => __( 'This license key does not support multisite installations. Please use a different license.', 'gravityforms' ),
|
||||
self::MAX_SITES_EXCEEDED => __( 'The license key has already been activated on its maximum number of sites; please upgrade your license. ', 'gravityforms' ),
|
||||
self::MULTISITE_NOT_ALLOWED => __( 'The license key does not support multisite installations. Please use a different license. ', 'gravityforms' ),
|
||||
self::EXPIRED_LICENSE_KEY => sprintf(
|
||||
/* translators: %1s and %2s are link tag markup */
|
||||
__( 'This license key has expired; please visit your %1$sGravity Forms account%2$s to manage your license.', 'gravityforms' ),
|
||||
__( 'The license key has expired; please visit your %1$sGravity Forms account%2$s to manage your license. ', 'gravityforms' ),
|
||||
'<a href="https://www.gravityforms.com/my-account/licenses/?utm_source=gf-admin&utm_medium=account-link-expired&utm_campaign=license-enforcement" target="_blank">',
|
||||
'</a>'
|
||||
),
|
||||
self::NO_LICENSE_KEY => sprintf(
|
||||
/* translators: %1$s admin link tag markup, %2$s closing markup, %3$s Gravity Forms link tag markup, %4$s closing markup */
|
||||
__( '%1$sRegister%2$s your copy of Gravity Forms to receive access to automatic upgrades and support. Need a license key? %3$sPurchase one now%4$s. ', 'gravityforms' ),
|
||||
'<a href="' . admin_url() . 'admin.php?page=gf_settings">',
|
||||
'</a>',
|
||||
'<a href="https://www.gravityforms.com" target="_blank">',
|
||||
'</a>'
|
||||
),
|
||||
self::SITE_UNREGISTERED => $general_invalid_message,
|
||||
self::INVALID_LICENSE_KEY => $general_invalid_message,
|
||||
self::URL_CHANGED => $general_invalid_message,
|
||||
|
||||
@@ -443,7 +443,7 @@ class GF_System_Report {
|
||||
'label' => esc_html__( 'WordPress Multisite', 'gravityforms' ),
|
||||
'label_export' => 'WordPress Multisite',
|
||||
'value' => is_multisite() ? __( 'Yes', 'gravityforms' ) : __( 'No', 'gravityforms' ),
|
||||
'value_export' => is_multisite() ? 'Yes' : 'No',
|
||||
'value_export' => is_multisite() ? sprintf( 'Yes (%d sites)', rgar( wp_count_sites(), 'all' ) ) : 'No',
|
||||
),
|
||||
array(
|
||||
'label' => esc_html__( 'WordPress Memory Limit', 'gravityforms' ),
|
||||
|
||||
@@ -116,7 +116,7 @@ abstract class GF_Telemetry_Data {
|
||||
$endpoint = defined( 'GF_TELEMETRY_ENDPOINT' ) ? GF_TELEMETRY_ENDPOINT : self::TELEMETRY_ENDPOINT;
|
||||
$site_url = get_site_url();
|
||||
$data = array(
|
||||
'license_key_md5' => md5( get_option( 'rg_gforms_key', '' ) ),
|
||||
'license_key_md5' => GFCommon::get_key(),
|
||||
'site_url' => $site_url,
|
||||
'product' => 'gravityforms',
|
||||
'tag' => 'system_report',
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1541,9 +1541,15 @@ class GFNotificationTable extends WP_List_Table {
|
||||
unset( $actions['delete'] );
|
||||
}
|
||||
|
||||
$aria_label = sprintf(
|
||||
/* translators: %s: Notification name */
|
||||
__( '%s (Edit)', 'gravityforms' ),
|
||||
$item['name']
|
||||
);
|
||||
|
||||
?>
|
||||
|
||||
<a href="<?php echo esc_url( $edit_url ); ?>"><strong><?php echo esc_html( rgar( $item, 'name' ) ); ?></strong></a>
|
||||
<a href="<?php echo esc_url( $edit_url ); ?>" aria-label="<?php echo esc_attr( $aria_label ); ?>"><strong><?php echo esc_html( rgar( $item, 'name' ) ); ?></strong></a>
|
||||
<div class="row-actions">
|
||||
|
||||
<?php
|
||||
|
||||
@@ -401,7 +401,7 @@ class GFSettings {
|
||||
private static function plugin_settings_fields() {
|
||||
$license_section_description = esc_html__( 'A valid license key is required for access to automatic plugin upgrades and product support.', 'gravityforms' );
|
||||
$is_hidden = false;
|
||||
if ( is_multisite() && ! is_main_site() && is_plugin_active_for_network( GF_PLUGIN_BASENAME ) ) {
|
||||
if ( ! is_main_site() && GFCommon::is_network_active() ) {
|
||||
$is_hidden = true;
|
||||
$license_section_description = esc_html__( 'License key is managed by the administrator of this network', 'gravityforms' );
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user