You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
252 lines
7.3 KiB
PHP
252 lines
7.3 KiB
PHP
<?php
|
|
/**
|
|
* This class handles the content in Status & Tools > System Status.
|
|
*
|
|
* @since 1.0.33
|
|
* @package RankMath
|
|
* @subpackage RankMath\Status
|
|
* @author Rank Math <support@rankmath.com>
|
|
*/
|
|
|
|
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() {
|
|
?>
|
|
<div class="rank-math-system-status rank-math-box">
|
|
<header>
|
|
<h3><?php esc_html_e( 'System Info', 'rank-math' ); ?></h3>
|
|
</header>
|
|
|
|
<div class="site-health-copy-buttons">
|
|
<div class="copy-button-wrapper">
|
|
<button type="button" class="button copy-button" data-clipboard-text="<?php echo esc_attr( \WP_Debug_Data::format( $this->wp_info, 'debug' ) ); ?>">
|
|
<?php esc_html_e( 'Copy System Info to Clipboard', 'rank-math' ); ?>
|
|
</button>
|
|
<span class="success hidden" aria-hidden="true"><?php esc_html_e( 'Copied!', 'rank-math' ); ?></span>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="health-check-debug" class="health-check-accordion">
|
|
<?php $this->display_system_info_list(); ?>
|
|
</div>
|
|
</div>
|
|
<?php
|
|
}
|
|
|
|
/**
|
|
* Display list for system info.
|
|
*
|
|
* @return void
|
|
*/
|
|
private function display_system_info_list() {
|
|
$directory = dirname( __FILE__ );
|
|
foreach ( $this->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( '<tr><td>%s</td><td>%s</td></tr>', 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 = '<ul>';
|
|
foreach ( $field_value as $name => $value ) {
|
|
$values .= sprintf( '<li>%s: %s</li>', esc_html( $name ), esc_html( $value ) );
|
|
}
|
|
$values .= '</ul>';
|
|
|
|
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 );
|
|
}
|
|
}
|