'',
'title' => '',
'tab_label' => '',
'handler' => false,
'icon_path' => '',
)
)
);
}
if ( ! isset( $tab_label ) || ! $tab_label ) {
$tab_label = $name;
}
/**
* Adds additional actions after settings pages are registered.
*
* @since Unknown
*
* @param string|array $handler The callback function being run.
*/
add_action( 'gform_settings_' . str_replace( ' ', '_', $name ), $handler );
self::$addon_pages[ $name ] = array( 'name' => $name, 'title' => $title, 'tab_label' => $tab_label, 'icon' => $icon_path );
}
/**
* Determines the content displayed on the Gravity Forms settings page.
*
* @since Unknown
* @access public
*
* @uses GFSettings::get_subview()
* @uses GFSettings::gravityforms_settings_page()
* @uses GFSettings::settings_uninstall_page()
* @uses GFSettings::page_header()
* @uses GFSettings::page_footer()
*
* @return void
*/
public static function settings_page() {
$subview = self::get_subview();
switch ( $subview ) {
case 'settings':
self::gravityforms_settings_page();
break;
case 'uninstall':
self::settings_uninstall_page();
break;
default:
self::page_header();
/**
* Fires in the settings page depending on which page of the settings page you are in (the Subview).
*
* @since Unknown
*
* @param mixed $subview The sub-section of the main Form's settings
*/
do_action( 'gform_settings_' . str_replace( ' ', '_', $subview ) );
self::page_footer();
}
}
/**
* Displays the Gravity Forms uninstall page.
*
* @since Unknown
* @access public
*
* @used-by GFSettings::settings_page()
* @uses GFSettings::page_header()
* @uses GFCommon::current_user_can_any()
* @uses GFFormsModel::drop_tables()
* @uses GFCommon::delete_directory()
* @uses GFFormsModel::get_upload_root()
* @uses GFCommon::current_user_can_any()
* @uses GFSettings::page_footer()
*/
public static function settings_uninstall_page() {
self::page_header( __( 'Uninstall Gravity Forms', 'gravityforms' ), '' );
if ( isset( $_POST['uninstall'] ) ) {
check_admin_referer( 'gform_uninstall', 'gform_uninstall_nonce' );
if ( ! GFCommon::current_user_can_uninstall() ) {
die( esc_html__( "You don't have adequate permission to uninstall Gravity Forms.", 'gravityforms' ) );
}
// Removing background tasks.
$processors = array(
GFForms::$background_upgrader,
gf_feed_processor()
);
/** @var GF_Background_Process $processor The background task processor. */
foreach ( $processors as $processor ) {
$processor->clear_scheduled_events();
$processor->clear_queue( true );
$processor->unlock_process();
}
// Removing cron task
wp_clear_scheduled_hook( 'gravityforms_cron' );
// Dropping all tables
RGFormsModel::drop_tables();
// Removing options
delete_option( 'rg_form_version' );
delete_option( 'rg_gforms_disable_css' );
delete_option( 'rg_gforms_enable_html5' );
delete_option( 'rg_gforms_captcha_public_key' );
delete_option( 'rg_gforms_captcha_private_key' );
delete_option( 'rg_gforms_message' );
delete_option( 'rg_gforms_currency' );
delete_option( 'rg_gforms_enable_akismet' );
delete_option( 'gf_dismissed_upgrades' );
delete_option( 'gf_db_version' );
delete_option( 'gf_previous_db_version' );
delete_option( 'gf_upgrade_lock' );
delete_option( 'gf_submissions_block' );
delete_option( 'gf_imported_file' );
delete_option( 'gf_imported_theme_file' );
delete_option( 'gform_api_count' );
delete_option( 'gform_email_count' );
delete_option( 'gform_enable_toolbar_menu' );
delete_option( 'gform_enable_logging' );
delete_option( 'gform_pending_installation' );
delete_option( 'gform_version_info' );
delete_option( 'gform_enable_noconflict' );
delete_option( 'gform_enable_background_updates' );
delete_option( 'gform_sticky_admin_messages' );
delete_option( 'gform_upgrade_status' );
delete_option( 'gform_custom_choices' );
delete_option( 'gform_recaptcha_keys_status' );
delete_option( 'gform_upload_page_slug' );
// Removes license key
GFFormsModel::save_key( '' );
// Removing gravity forms upload folder
GFCommon::delete_directory( RGFormsModel::get_upload_root() );
// Delete Logging settings and logging files
gf_logging()->delete_settings();
gf_logging()->delete_log_files();
// Deactivating plugin
$plugin = 'gravityforms/gravityforms.php';
deactivate_plugins( $plugin );
update_option( 'recently_activated', array( $plugin => time() ) + (array) get_option( 'recently_activated' ) );
?>
", '' ) ?>
gf_logging()->get_slug(),
'tab_label' => gf_logging()->get_short_title(),
'title' => gf_logging()->plugin_settings_title(),
'handler' => array( gf_logging(), 'plugin_settings_page' ),
),
null,
null
);
// Enabling all loggers by default
gf_logging()->enable_all_loggers();
} else {
// Update option.
update_option( 'gform_enable_logging', (bool) rgpost( 'gform_enable_logging' ) );
// Remove settings page.
unset( self::$addon_pages[ gf_logging()->get_slug() ] );
// Remove Log Files
gf_logging()->delete_log_files();
}
if ( rgpost( 'gform_recaptcha_reset' ) ) {
$site = get_option( 'rg_gforms_captcha_public_key' );
$secret = get_option( 'rg_gforms_captcha_private_key' );
$response = rgpost( 'g-recaptcha-response' );
GFCommon::log_debug( 'site:' . $site );
GFCommon::log_debug( 'secret:' . $secret );
GFCommon::log_debug( 'response:' . $response );
if ( $site && $secret && $response ) {
$recaptcha = new GF_Field_CAPTCHA();
$recaptcha_response = $recaptcha->verify_recaptcha_response( $response, $secret );
GFCommon::log_debug( 'recaptcha response:' . $recaptcha_response );
update_option( 'gform_recaptcha_keys_status', $recaptcha_response );
} else {
delete_option( 'gform_recaptcha_keys_status' );
}
}
if ( ! rgempty( 'gforms_currency' ) && in_array( rgpost( 'gforms_currency' ), array_keys( RGCurrency::get_currencies() ) ) ) {
update_option( 'rg_gforms_currency', rgpost( 'gforms_currency' ) );
}
// Updating message because key could have been changed
GFCommon::cache_remote_message();
// Re-caching version info
$version_info = GFCommon::get_version_info( false );
?>
'POST', 'timeout' => 3, 'body' => $body );
$options['headers'] = array(
'Content-Type' => 'application/x-www-form-urlencoded; charset=' . get_option( 'blog_charset' ),
'Content-Length' => strlen( $body ),
'User-Agent' => 'WordPress/' . get_bloginfo( 'version' ),
'Referer' => get_bloginfo( 'url' ),
);
$raw_response = GFCommon::post_to_manager( 'api.php', 'op=upgrade_message&key=' . GFCommon::get_key(), $options );
if ( is_wp_error( $raw_response ) || 200 != $raw_response['response']['code'] ) {
$message = '';
} else {
$message = $raw_response['body'];
}
// Validating that message is a valid Gravity Form message. If message is invalid, don't display anything.
if ( substr( $message, 0, 10 ) != '' ) {
$message = '';
}
echo $message;
exit;
}
/**
* Outputs the settings page header.
*
* @since Unknown
* @access public
*
* @uses SCRIPT_DEBUG
* @uses GFSettings::get_subview()
* @uses GFSettings::$addon_pages
* @uses GFCommon::get_browser_class()
* @uses GFCommon::display_dismissible_message()
*
* @param string $title Optional. The page title to be used. Defaults to an empty string.
* @param string $message Optional. The message to display in the header. Defaults to empty string.
*
* @return void
*/
public static function page_header( $title = '', $message = '' ) {
// Print admin styles.
wp_print_styles( array( 'jquery-ui-styles', 'gform_admin' ) );
$current_tab = self::get_subview();
// Build left side options, always have GF Settings first and Uninstall last, put add-ons in the middle.
$setting_tabs = array( '10' => array( 'name' => 'settings', 'label' => __( 'Settings', 'gravityforms' ) ) );
if ( ! empty( self::$addon_pages ) ) {
$sorted_addons = self::$addon_pages;
asort( $sorted_addons );
// Add add-ons to menu
foreach ( $sorted_addons as $sorted_addon ) {
$setting_tabs[] = array(
'name' => urlencode( $sorted_addon['name'] ),
'label' => esc_html( $sorted_addon['tab_label'] ),
'title' => esc_html( rgar( $sorted_addon, 'title' ) ),
);
}
}
// Prevent Uninstall tab from being added for users that don't have gravityforms_uninstall capability.
if ( GFCommon::current_user_can_uninstall() ) {
$setting_tabs[] = array( 'name' => 'uninstall', 'label' => __( 'Uninstall', 'gravityforms' ) );
}
/**
* Filters the Settings menu tabs.
*
* @since Unknown
*
* @param array $setting_tabs The settings tab names and labels.
*/
$setting_tabs = apply_filters( 'gform_settings_menu', $setting_tabs );
ksort( $setting_tabs, SORT_NUMERIC );
// Kind of boring having to pass the title, optionally get it from the settings tab
if ( ! $title ) {
foreach ( $setting_tabs as $tab ) {
if ( $tab['name'] == urlencode( $current_tab ) ) {
$title = ! empty( $tab['title'] ) ? $tab['title'] : $tab['label'];
}
}
}
?>