System Status. * * @since 1.0.33 * @package RankMath * @subpackage RankMath\Status * @author Rank Math */ namespace RankMath\Status; use RankMath\Helper; use RankMath\Google\Authentication; use RankMath\Admin\Admin_Helper; use RankMath\Google\Permissions; defined( 'ABSPATH' ) || exit; /** * System_Status class. */ class System_Status { /** * WP Info. * * @var array */ private $wp_info = []; /** * Display Database/Tables Details. */ public function display() { $this->prepare_info(); $this->display_system_info(); ( new Error_Log() )->display(); // phpcs:ignore } /** * Display system details. */ private function display_system_info() { ?>

display_system_info_list(); ?>
wp_info as $section => $details ) { if ( ! isset( $details['fields'] ) || empty( $details['fields'] ) ) { continue; } include $directory . '/views/system-status-accordion.php'; } } /** * Display individual fields for the system info. * * @param array $fields Fields array. * @return void */ protected function display_system_info_fields( $fields ) { foreach ( $fields as $field_name => $field ) { $values = $this->system_info_value( $field_name, $field['value'] ); printf( '%s%s', esc_html( $field['label'] ), wp_kses_post( $values ) ); } } /** * Get individual values for the system info. * * @param string $field_name Field name. * @param mixed $field_value Field value. * @return string Output HTML. */ private function system_info_value( $field_name, $field_value ) { if ( is_array( $field_value ) ) { $values = ''; return $values; } return esc_html( $field_value ); } /** * Get Database information. */ private function prepare_info() { global $wpdb; $plan = Admin_Helper::get_registration_data(); $tokens = Authentication::tokens(); $modules = Helper::get_active_modules(); $rankmath = [ 'label' => esc_html__( 'Rank Math', 'rank-math' ), 'fields' => [ 'version' => [ 'label' => esc_html__( 'Version', 'rank-math' ), 'value' => get_option( 'rank_math_version' ), ], 'database_version' => [ 'label' => esc_html__( 'Database version', 'rank-math' ), 'value' => get_option( 'rank_math_db_version' ), ], 'plugin_plan' => [ 'label' => esc_html__( 'Plugin subscription plan', 'rank-math' ), 'value' => isset( $plan['plan'] ) ? \ucwords( $plan['plan'] ) : esc_html__( 'Free', 'rank-math' ), ], 'active_modules' => [ 'label' => esc_html__( 'Active modules', 'rank-math' ), 'value' => empty( $modules ) ? esc_html__( '(none)', 'rank-math' ) : join( ', ', $modules ), ], 'refresh_token' => [ 'label' => esc_html__( 'Google Refresh token', 'rank-math' ), 'value' => empty( $tokens['refresh_token'] ) ? esc_html__( 'No token', 'rank-math' ) : esc_html__( 'Token exists', 'rank-math' ), ], 'permissions' => [ 'label' => esc_html__( 'Google Permission', 'rank-math' ), 'value' => Permissions::get_status(), ], ], ]; $database_tables = $wpdb->get_results( $wpdb->prepare( "SELECT table_name AS 'name' FROM information_schema.TABLES WHERE table_schema = %s AND table_name LIKE %s ORDER BY name ASC;", DB_NAME, '%rank\\_math%' ) ); $tables = []; foreach ( $database_tables as $table ) { $name = \str_replace( $wpdb->prefix, '', $table->name ); $tables[ $name ] = true; } $should_exist = [ 'rank_math_404_logs' => esc_html__( 'Database Table: 404 Log', 'rank-math' ), 'rank_math_redirections' => esc_html__( 'Database Table: Redirection', 'rank-math' ), 'rank_math_redirections_cache' => esc_html__( 'Database Table: Redirection Cache', 'rank-math' ), 'rank_math_internal_links' => esc_html__( 'Database Table: Internal Link', 'rank-math' ), 'rank_math_internal_meta' => esc_html__( 'Database Table: Internal Link Meta', 'rank-math' ), 'rank_math_analytics_gsc' => esc_html__( 'Database Table: Google Search Console', 'rank-math' ), 'rank_math_analytics_objects' => esc_html__( 'Database Table: Flat Posts', 'rank-math' ), 'rank_math_analytics_ga' => esc_html__( 'Database Table: Google Analytics', 'rank-math' ), 'rank_math_analytics_adsense' => esc_html__( 'Database Table: Google AdSense', 'rank-math' ), 'rank_math_analytics_keyword_manager' => esc_html__( 'Database Table: Keyword Manager', 'rank-math' ), 'rank_math_analytics_inspections' => esc_html__( 'Database Table: Inspections', 'rank-math' ), ]; if ( ! defined( 'RANK_MATH_PRO_FILE' ) ) { unset( $should_exist['rank_math_analytics_ga'], $should_exist['rank_math_analytics_adsense'], $should_exist['rank_math_analytics_keyword_manager'] ); } foreach ( $should_exist as $name => $label ) { $rankmath['fields'][ $name ] = [ 'label' => $label, 'value' => isset( $tables[ $name ] ) ? $this->get_table_size( $name ) : esc_html__( 'Not found', 'rank-math' ), ]; } // Core debug data. if ( ! class_exists( 'WP_Debug_Data' ) ) { require_once ABSPATH . 'wp-admin/includes/class-wp-debug-data.php'; } wp_enqueue_style( 'site-health' ); wp_enqueue_script( 'site-health' ); $rankmath_data = apply_filters( 'rank_math/status/rank_math_info', $rankmath ); $core_data = \WP_Debug_Data::debug_data(); // Keep only relevant data. $core_data = array_intersect_key( $core_data, array_flip( [ 'wp-core', 'wp-dropins', 'wp-active-theme', 'wp-parent-theme', 'wp-mu-plugins', 'wp-plugins-active', 'wp-server', 'wp-database', 'wp-constants', 'wp-filesystem', ] ) ); $this->wp_info = [ 'rank-math' => $rankmath_data ] + $core_data; } /** * Get Table size. * * @param string $table Table name. * * @return int Table size. */ public function get_table_size( $table ) { global $wpdb; $size = (int) $wpdb->get_var( "SELECT SUM((data_length + index_length)) AS size FROM information_schema.TABLES WHERE table_schema='" . $wpdb->dbname . "' AND (table_name='" . $wpdb->prefix . $table . "')" ); // phpcs:ignore return size_format( $size ); } }