Make WordPress Core

Ticket #46726: 46726.2.diff

File 46726.2.diff, 54.0 KB (added by xkon, 6 years ago)

cs fixes

  • src/wp-admin/includes/class-wp-debug-data.php

    diff --git a/src/wp-admin/includes/class-wp-debug-data.php b/src/wp-admin/includes/class-wp-debug-data.php
    index 4884de2700..05545efa85 100644
    a b class WP_Debug_Data { 
    3030         * @param string $locale Optional. An ISO formatted language code to provide debug translations in. Default null.
    3131         * @return array The debug data for the site.
    3232         */
    33         static function debug_data( $locale = null ) {
     33        static function debug_data() {
    3434                global $wpdb;
    35                 if ( ! empty( $locale ) ) {
    36                         // Change the language used for translations
    37                         $original_locale = get_user_locale();
    38                         $switched_locale = switch_to_locale( $locale );
    39                 }
    4035
    41                 $upload_dir           = wp_get_upload_dir();
    42                 $core_current_version = get_bloginfo( 'version' );
    43                 $core_updates         = get_core_updates();
    44                 $core_update_needed   = '';
     36                // Save few function calls.
     37                $locale              = get_user_locale();
     38                $upload_dir          = wp_get_upload_dir();
     39                $permalink_structure = get_option( 'permalink_structure' );
     40                $is_ssl              = is_ssl();
     41                $users_can_register  = get_option( 'users_can_register' );
     42                $is_multisite        = is_multisite();
     43                $core_version        = get_bloginfo( 'version' );
     44                $core_updates        = get_core_updates();
     45                $core_update_needed  = '';
    4546
    4647                foreach ( $core_updates as $core => $update ) {
    4748                        if ( 'upgrade' === $update->response ) {
    class WP_Debug_Data { 
    5354                }
    5455
    5556                // Set up the array that holds all debug information.
    56                 $info = array(
    57                         'wp-core'             => array(
    58                                 'label'  => __( 'WordPress' ),
    59                                 'fields' => array(
    60                                         'version'                => array(
    61                                                 'label' => __( 'Version' ),
    62                                                 'value' => $core_current_version . $core_update_needed,
    63                                         ),
    64                                         'language'               => array(
    65                                                 'label' => __( 'Language' ),
    66                                                 'value' => ( ! empty( $locale ) ? $original_locale : get_user_locale() ),
    67                                         ),
    68                                         'home_url'               => array(
    69                                                 'label'   => __( 'Home URL' ),
    70                                                 'value'   => get_bloginfo( 'url' ),
    71                                                 'private' => true,
    72                                         ),
    73                                         'site_url'               => array(
    74                                                 'label'   => __( 'Site URL' ),
    75                                                 'value'   => get_bloginfo( 'wpurl' ),
    76                                                 'private' => true,
    77                                         ),
    78                                         'permalink'              => array(
    79                                                 'label' => __( 'Permalink structure' ),
    80                                                 'value' => get_option( 'permalink_structure' ) ?: __( 'No permalink structure set' ),
    81                                         ),
    82                                         'https_status'           => array(
    83                                                 'label' => __( 'Is this site using HTTPS?' ),
    84                                                 'value' => ( is_ssl() ? __( 'Yes' ) : __( 'No' ) ),
    85                                         ),
    86                                         'user_registration'      => array(
    87                                                 'label' => __( 'Can anyone register on this site?' ),
    88                                                 'value' => ( get_option( 'users_can_register' ) ? __( 'Yes' ) : __( 'No' ) ),
    89                                         ),
    90                                         'default_comment_status' => array(
    91                                                 'label' => __( 'Default comment status' ),
    92                                                 'value' => get_option( 'default_comment_status' ),
    93                                         ),
    94                                         'multisite'              => array(
    95                                                 'label' => __( 'Is this a multisite?' ),
    96                                                 'value' => ( is_multisite() ? __( 'Yes' ) : __( 'No' ) ),
    97                                         ),
     57                $info = array();
     58
     59                $info['wp-core'] = array(
     60                        'label'  => __( 'WordPress' ),
     61                        'fields' => array(
     62                                'version'                => array(
     63                                        'label' => __( 'Version' ),
     64                                        'value' => $core_version . $core_update_needed,
     65                                        'debug' => $core_version,
     66                                ),
     67                                'language'               => array(
     68                                        'label' => __( 'Language' ),
     69                                        'value' => $locale,
     70                                ),
     71                                'home_url'               => array(
     72                                        'label'   => __( 'Home URL' ),
     73                                        'value'   => get_bloginfo( 'url' ),
     74                                        'private' => true,
     75                                ),
     76                                'site_url'               => array(
     77                                        'label'   => __( 'Site URL' ),
     78                                        'value'   => get_bloginfo( 'wpurl' ),
     79                                        'private' => true,
     80                                ),
     81                                'permalink'              => array(
     82                                        'label' => __( 'Permalink structure' ),
     83                                        'value' => $permalink_structure ?: __( 'No permalink structure set' ),
     84                                        'debug' => $permalink_structure,
     85                                ),
     86                                'https_status'           => array(
     87                                        'label' => __( 'Is this site using HTTPS?' ),
     88                                        'value' => ( $is_ssl ? __( 'Yes' ) : __( 'No' ) ),
     89                                        'debug' => $is_ssl,
     90                                ),
     91                                'user_registration'      => array(
     92                                        'label' => __( 'Can anyone register on this site?' ),
     93                                        'value' => ( $users_can_register ? __( 'Yes' ) : __( 'No' ) ),
     94                                        'debug' => $users_can_register,
     95                                ),
     96                                'default_comment_status' => array(
     97                                        'label' => __( 'Default comment status' ),
     98                                        'value' => get_option( 'default_comment_status' ),
     99                                ),
     100                                'multisite'              => array(
     101                                        'label' => __( 'Is this a multisite?' ),
     102                                        'value' => ( $is_multisite ? __( 'Yes' ) : __( 'No' ) ),
     103                                        'debug' => $is_multisite,
    98104                                ),
    99105                        ),
    100                         'wp-paths-sizes'      => array(
    101                                 'label'  => __( 'Directories and Sizes' ),
    102                                 'fields' => array(),
    103                         ),
    104                         'wp-dropins'          => array(
    105                                 'label'       => __( 'Drop-ins' ),
    106                                 'show_count'  => true,
    107                                 'description' => __( 'Drop-ins are single files that replace or enhance WordPress features in ways that are not possible for traditional plugins.' ),
    108                                 'fields'      => array(),
    109                         ),
    110                         'wp-active-theme'     => array(
    111                                 'label'  => __( 'Active Theme' ),
    112                                 'fields' => array(),
    113                         ),
    114                         'wp-themes'           => array(
    115                                 'label'      => __( 'Other Themes' ),
    116                                 'show_count' => true,
    117                                 'fields'     => array(),
    118                         ),
    119                         'wp-mu-plugins'       => array(
    120                                 'label'      => __( 'Must Use Plugins' ),
    121                                 'show_count' => true,
    122                                 'fields'     => array(),
    123                         ),
    124                         'wp-plugins-active'   => array(
    125                                 'label'      => __( 'Active Plugins' ),
    126                                 'show_count' => true,
    127                                 'fields'     => array(),
    128                         ),
    129                         'wp-plugins-inactive' => array(
    130                                 'label'      => __( 'Inactive Plugins' ),
    131                                 'show_count' => true,
    132                                 'fields'     => array(),
    133                         ),
    134                         'wp-media'            => array(
    135                                 'label'  => __( 'Media Handling' ),
    136                                 'fields' => array(),
    137                         ),
    138                         'wp-server'           => array(
    139                                 'label'       => __( 'Server' ),
    140                                 'description' => __( 'The options shown below relate to your server setup. If changes are required, you may need your web host’s assistance.' ),
    141                                 'fields'      => array(),
    142                         ),
    143                         'wp-database'         => array(
    144                                 'label'  => __( 'Database' ),
    145                                 'fields' => array(),
    146                         ),
    147                         'wp-constants'        => array(
    148                                 'label'       => __( 'WordPress Constants' ),
    149                                 'description' => __( 'These settings alter where and how parts of WordPress are loaded.' ),
    150                                 'fields'      => array(
    151                                         'ABSPATH'             => array(
    152                                                 'label'   => 'ABSPATH',
    153                                                 'value'   => ABSPATH,
    154                                                 'private' => true,
    155                                         ),
    156                                         'WP_HOME'             => array(
    157                                                 'label' => 'WP_HOME',
    158                                                 'value' => ( ! defined( 'WP_HOME' ) ? __( 'Undefined' ) : WP_HOME ),
    159                                         ),
    160                                         'WP_SITEURL'          => array(
    161                                                 'label' => 'WP_SITEURL',
    162                                                 'value' => ( ! defined( 'WP_SITEURL' ) ? __( 'Undefined' ) : WP_SITEURL ),
    163                                         ),
    164                                         'WP_CONTENT_DIR'      => array(
    165                                                 'label' => 'WP_CONTENT_DIR',
    166                                                 'value' => WP_CONTENT_DIR,
    167                                         ),
    168                                         'WP_PLUGIN_DIR'       => array(
    169                                                 'label' => 'WP_PLUGIN_DIR',
    170                                                 'value' => WP_PLUGIN_DIR,
    171                                         ),
    172                                         'WP_DEBUG'            => array(
    173                                                 'label' => 'WP_DEBUG',
    174                                                 'value' => WP_DEBUG ? __( 'Enabled' ) : __( 'Disabled' ),
    175                                         ),
    176                                         'WP_MAX_MEMORY_LIMIT' => array(
    177                                                 'label' => 'WP_MAX_MEMORY_LIMIT',
    178                                                 'value' => WP_MAX_MEMORY_LIMIT,
    179                                         ),
    180                                         'WP_DEBUG_DISPLAY'    => array(
    181                                                 'label' => 'WP_DEBUG_DISPLAY',
    182                                                 'value' => WP_DEBUG_DISPLAY ? __( 'Enabled' ) : __( 'Disabled' ),
    183                                         ),
    184                                         'WP_DEBUG_LOG'        => array(
    185                                                 'label' => 'WP_DEBUG_LOG',
    186                                                 'value' => ( is_string( WP_DEBUG_LOG ) ? WP_DEBUG_LOG : ( WP_DEBUG_LOG ? __( 'Enabled' ) : __( 'Disabled' ) ) ),
    187                                         ),
    188                                         'SCRIPT_DEBUG'        => array(
    189                                                 'label' => 'SCRIPT_DEBUG',
    190                                                 'value' => SCRIPT_DEBUG ? __( 'Enabled' ) : __( 'Disabled' ),
    191                                         ),
    192                                         'WP_CACHE'            => array(
    193                                                 'label' => 'WP_CACHE',
    194                                                 'value' => WP_CACHE ? __( 'Enabled' ) : __( 'Disabled' ),
    195                                         ),
    196                                         'CONCATENATE_SCRIPTS' => array(
    197                                                 'label' => 'CONCATENATE_SCRIPTS',
    198                                                 'value' => ( ! defined( 'CONCATENATE_SCRIPTS' ) ? __( 'Undefined' ) : ( CONCATENATE_SCRIPTS ? __( 'Enabled' ) : __( 'Disabled' ) ) ),
    199                                         ),
    200                                         'COMPRESS_SCRIPTS'    => array(
    201                                                 'label' => 'COMPRESS_SCRIPTS',
    202                                                 'value' => ( ! defined( 'COMPRESS_SCRIPTS' ) ? __( 'Undefined' ) : ( COMPRESS_SCRIPTS ? __( 'Enabled' ) : __( 'Disabled' ) ) ),
    203                                         ),
    204                                         'COMPRESS_CSS'        => array(
    205                                                 'label' => 'COMPRESS_CSS',
    206                                                 'value' => ( ! defined( 'COMPRESS_CSS' ) ? __( 'Undefined' ) : ( COMPRESS_CSS ? __( 'Enabled' ) : __( 'Disabled' ) ) ),
    207                                         ),
    208                                         'WP_LOCAL_DEV'        => array(
    209                                                 'label' => 'WP_LOCAL_DEV',
    210                                                 'value' => ( ! defined( 'WP_LOCAL_DEV' ) ? __( 'Undefined' ) : ( WP_LOCAL_DEV ? __( 'Enabled' ) : __( 'Disabled' ) ) ),
    211                                         ),
     106                );
     107
     108                $info['wp-paths-sizes'] = array(
     109                        'label'  => __( 'Directories and Sizes' ),
     110                        'fields' => array(),
     111                );
     112
     113                $info['wp-dropins'] = array(
     114                        'label'       => __( 'Drop-ins' ),
     115                        'show_count'  => true,
     116                        'description' => __( 'Drop-ins are single files that replace or enhance WordPress features in ways that are not possible for traditional plugins.' ),
     117                        'fields'      => array(),
     118                );
     119
     120                $info['wp-active-theme'] = array(
     121                        'label'  => __( 'Active Theme' ),
     122                        'fields' => array(),
     123                );
     124
     125                $info['wp-themes'] = array(
     126                        'label'      => __( 'Other Themes' ),
     127                        'show_count' => true,
     128                        'fields'     => array(),
     129                );
     130
     131                $info['wp-mu-plugins'] = array(
     132                        'label'      => __( 'Must Use Plugins' ),
     133                        'show_count' => true,
     134                        'fields'     => array(),
     135                );
     136
     137                $info['wp-plugins-active'] = array(
     138                        'label'      => __( 'Active Plugins' ),
     139                        'show_count' => true,
     140                        'fields'     => array(),
     141                );
     142
     143                $info['wp-plugins-inactive'] = array(
     144                        'label'      => __( 'Inactive Plugins' ),
     145                        'show_count' => true,
     146                        'fields'     => array(),
     147                );
     148
     149                $info['wp-media'] = array(
     150                        'label'  => __( 'Media Handling' ),
     151                        'fields' => array(),
     152                );
     153
     154                $info['wp-server'] = array(
     155                        'label'       => __( 'Server' ),
     156                        'description' => __( 'The options shown below relate to your server setup. If changes are required, you may need your web host’s assistance.' ),
     157                        'fields'      => array(),
     158                );
     159
     160                $info['wp-database'] = array(
     161                        'label'  => __( 'Database' ),
     162                        'fields' => array(),
     163                );
     164
     165                // Check if WP_DEBUG_LOG is set.
     166                $wp_debug_log_value = __( 'Disabled' );
     167
     168                if ( is_string( WP_DEBUG_LOG ) ) {
     169                        $wp_debug_log_value = WP_DEBUG_LOG;
     170                } elseif ( WP_DEBUG_LOG ) {
     171                        $wp_debug_log_value = __( 'Enabled' );
     172                }
     173
     174                // Check CONCATENATE_SCRIPTS.
     175                if ( defined( 'CONCATENATE_SCRIPTS' ) ) {
     176                        $concatenate_scripts       = CONCATENATE_SCRIPTS ? __( 'Enabled' ) : __( 'Disabled' );
     177                        $concatenate_scripts_debug = CONCATENATE_SCRIPTS ? 'true' : 'false';
     178                } else {
     179                        $concatenate_scripts       = __( 'Undefined' );
     180                        $concatenate_scripts_debug = 'undefined';
     181                }
     182
     183                // Check COMPRESS_SCRIPTS.
     184                if ( defined( 'COMPRESS_SCRIPTS' ) ) {
     185                        $compress_scripts       = COMPRESS_SCRIPTS ? __( 'Enabled' ) : __( 'Disabled' );
     186                        $compress_scripts_debug = COMPRESS_SCRIPTS ? 'true' : 'false';
     187                } else {
     188                        $compress_scripts       = __( 'Undefined' );
     189                        $compress_scripts_debug = 'undefined';
     190                }
     191
     192                // Check COMPRESS_CSS.
     193                if ( defined( 'COMPRESS_CSS' ) ) {
     194                        $compress_css       = COMPRESS_CSS ? __( 'Enabled' ) : __( 'Disabled' );
     195                        $compress_css_debug = COMPRESS_CSS ? 'true' : 'false';
     196                } else {
     197                        $compress_css       = __( 'Undefined' );
     198                        $compress_css_debug = 'undefined';
     199                }
     200
     201                // Check WP_LOCAL_DEV.
     202                if ( defined( 'WP_LOCAL_DEV' ) ) {
     203                        $wp_local_dev       = WP_LOCAL_DEV ? __( 'Enabled' ) : __( 'Disabled' );
     204                        $wp_local_dev_debug = WP_LOCAL_DEV ? 'true' : 'false';
     205                } else {
     206                        $wp_local_dev       = __( 'Undefined' );
     207                        $wp_local_dev_debug = 'undefined';
     208                }
     209
     210                $info['wp-constants'] = array(
     211                        'label'       => __( 'WordPress Constants' ),
     212                        'description' => __( 'These settings alter where and how parts of WordPress are loaded.' ),
     213                        'fields'      => array(
     214                                'ABSPATH'             => array(
     215                                        'label'   => 'ABSPATH',
     216                                        'value'   => ABSPATH,
     217                                        'private' => true,
     218                                ),
     219                                'WP_HOME'             => array(
     220                                        'label' => 'WP_HOME',
     221                                        'value' => ( defined( 'WP_HOME' ) ? WP_HOME : __( 'Undefined' ) ),
     222                                        'debug' => ( defined( 'WP_HOME' ) ? WP_HOME : 'undefined' ),
     223                                ),
     224                                'WP_SITEURL'          => array(
     225                                        'label' => 'WP_SITEURL',
     226                                        'value' => ( defined( 'WP_SITEURL' ) ? WP_SITEURL : __( 'Undefined' ) ),
     227                                        'debug' => ( defined( 'WP_SITEURL' ) ? WP_SITEURL : 'undefined' ),
     228                                ),
     229                                'WP_CONTENT_DIR'      => array(
     230                                        'label' => 'WP_CONTENT_DIR',
     231                                        'value' => WP_CONTENT_DIR,
     232                                ),
     233                                'WP_PLUGIN_DIR'       => array(
     234                                        'label' => 'WP_PLUGIN_DIR',
     235                                        'value' => WP_PLUGIN_DIR,
     236                                ),
     237                                'WP_DEBUG'            => array(
     238                                        'label' => 'WP_DEBUG',
     239                                        'value' => WP_DEBUG ? __( 'Enabled' ) : __( 'Disabled' ),
     240                                        'debug' => WP_DEBUG,
     241                                ),
     242                                'WP_MAX_MEMORY_LIMIT' => array(
     243                                        'label' => 'WP_MAX_MEMORY_LIMIT',
     244                                        'value' => WP_MAX_MEMORY_LIMIT,
     245                                ),
     246                                'WP_DEBUG_DISPLAY'    => array(
     247                                        'label' => 'WP_DEBUG_DISPLAY',
     248                                        'value' => WP_DEBUG_DISPLAY ? __( 'Enabled' ) : __( 'Disabled' ),
     249                                        'debug' => WP_DEBUG_DISPLAY,
     250                                ),
     251                                'WP_DEBUG_LOG'        => array(
     252                                        'label' => 'WP_DEBUG_LOG',
     253                                        'value' => $wp_debug_log_value,
     254                                        'debug' => WP_DEBUG_LOG,
     255                                ),
     256                                'SCRIPT_DEBUG'        => array(
     257                                        'label' => 'SCRIPT_DEBUG',
     258                                        'value' => SCRIPT_DEBUG ? __( 'Enabled' ) : __( 'Disabled' ),
     259                                        'debug' => SCRIPT_DEBUG,
     260                                ),
     261                                'WP_CACHE'            => array(
     262                                        'label' => 'WP_CACHE',
     263                                        'value' => WP_CACHE ? __( 'Enabled' ) : __( 'Disabled' ),
     264                                        'debug' => WP_CACHE,
     265                                ),
     266                                'CONCATENATE_SCRIPTS' => array(
     267                                        'label' => 'CONCATENATE_SCRIPTS',
     268                                        'value' => $concatenate_scripts,
     269                                        'debug' => $concatenate_scripts_debug,
     270                                ),
     271                                'COMPRESS_SCRIPTS'    => array(
     272                                        'label' => 'COMPRESS_SCRIPTS',
     273                                        'value' => $compress_scripts,
     274                                        'debug' => $compress_scripts_debug,
     275                                ),
     276                                'COMPRESS_CSS'        => array(
     277                                        'label' => 'COMPRESS_CSS',
     278                                        'value' => $compress_css,
     279                                        'debug' => $compress_css_debug,
     280                                ),
     281                                'WP_LOCAL_DEV'        => array(
     282                                        'label' => 'WP_LOCAL_DEV',
     283                                        'value' => $wp_local_dev,
     284                                        'debug' => $wp_local_dev_debug,
    212285                                ),
    213286                        ),
    214                         'wp-filesystem'       => array(
    215                                 'label'       => __( 'Filesystem Permissions' ),
    216                                 'description' => __( 'Shows whether WordPress is able to write to the directories it needs access to.' ),
    217                                 'fields'      => array(
    218                                         'all'        => array(
    219                                                 'label' => __( 'The main WordPress directory' ),
    220                                                 'value' => ( wp_is_writable( ABSPATH ) ? __( 'Writable' ) : __( 'Not writable' ) ),
    221                                         ),
    222                                         'wp-content' => array(
    223                                                 'label' => __( 'The wp-content directory' ),
    224                                                 'value' => ( wp_is_writable( WP_CONTENT_DIR ) ? __( 'Writable' ) : __( 'Not writable' ) ),
    225                                         ),
    226                                         'uploads'    => array(
    227                                                 'label' => __( 'The uploads directory' ),
    228                                                 'value' => ( wp_is_writable( $upload_dir['basedir'] ) ? __( 'Writable' ) : __( 'Not writable' ) ),
    229                                         ),
    230                                         'plugins'    => array(
    231                                                 'label' => __( 'The plugins directory' ),
    232                                                 'value' => ( wp_is_writable( WP_PLUGIN_DIR ) ? __( 'Writable' ) : __( 'Not writable' ) ),
    233                                         ),
    234                                         'themes'     => array(
    235                                                 'label' => __( 'The themes directory' ),
    236                                                 'value' => ( wp_is_writable( get_template_directory() . '/..' ) ? __( 'Writable' ) : __( 'Not writable' ) ),
    237                                         ),
     287                );
     288
     289                $is_writable_abspath            = wp_is_writable( ABSPATH );
     290                $is_writable_wp_content_dir     = wp_is_writable( WP_CONTENT_DIR );
     291                $is_writable_upload_dir         = wp_is_writable( $upload_dir['basedir'] );
     292                $is_writable_wp_plugin_dir      = wp_is_writable( WP_PLUGIN_DIR );
     293                $is_writable_template_directory = wp_is_writable( get_template_directory() . '/..' );
     294
     295                $info['wp-filesystem'] = array(
     296                        'label'       => __( 'Filesystem Permissions' ),
     297                        'description' => __( 'Shows whether WordPress is able to write to the directories it needs access to.' ),
     298                        'fields'      => array(
     299                                'wordpress'  => array(
     300                                        'label' => __( 'The main WordPress directory' ),
     301                                        'value' => ( $is_writable_abspath ? __( 'Writable' ) : __( 'Not writable' ) ),
     302                                        'debug' => ( $is_writable_abspath ? 'writable' : 'not writable' ),
     303                                ),
     304                                'wp-content' => array(
     305                                        'label' => __( 'The wp-content directory' ),
     306                                        'value' => ( $is_writable_wp_content_dir ? __( 'Writable' ) : __( 'Not writable' ) ),
     307                                        'debug' => ( $is_writable_wp_content_dir ? 'writable' : 'not writable' ),
     308                                ),
     309                                'uploads'    => array(
     310                                        'label' => __( 'The uploads directory' ),
     311                                        'value' => ( $is_writable_upload_dir ? __( 'Writable' ) : __( 'Not writable' ) ),
     312                                        'debug' => ( $is_writable_upload_dir ? 'writable' : 'not writable' ),
     313                                ),
     314                                'plugins'    => array(
     315                                        'label' => __( 'The plugins directory' ),
     316                                        'value' => ( $is_writable_wp_plugin_dir ? __( 'Writable' ) : __( 'Not writable' ) ),
     317                                        'debug' => ( $is_writable_wp_plugin_dir ? 'writable' : 'not writable' ),
     318                                ),
     319                                'themes'     => array(
     320                                        'label' => __( 'The themes directory' ),
     321                                        'value' => ( $is_writable_template_directory ? __( 'Writable' ) : __( 'Not writable' ) ),
     322                                        'debug' => ( $is_writable_template_directory ? 'writable' : 'not writable' ),
    238323                                ),
    239324                        ),
    240325                );
    class WP_Debug_Data { 
    255340                                $site_count += get_blog_count( $network_id );
    256341                        }
    257342
    258                         $info['wp-core']['fields']['user_count']    = array(
     343                        $info['wp-core']['fields']['user_count'] = array(
    259344                                'label' => __( 'User count' ),
    260345                                'value' => get_user_count(),
    261346                        );
    262                         $info['wp-core']['fields']['site_count']    = array(
     347
     348                        $info['wp-core']['fields']['site_count'] = array(
    263349                                'label' => __( 'Site count' ),
    264350                                'value' => $site_count,
    265351                        );
     352
    266353                        $info['wp-core']['fields']['network_count'] = array(
    267354                                'label' => __( 'Network count' ),
    268355                                'value' => $network_query->found_networks,
    class WP_Debug_Data { 
    277364                }
    278365
    279366                // WordPress features requiring processing.
    280                 $wp_dotorg = wp_remote_get(
    281                         'https://wordpress.org',
    282                         array(
    283                                 'timeout' => 10,
    284                         )
    285                 );
     367                $wp_dotorg = wp_remote_get( 'https://wordpress.org', array( 'timeout' => 10 ) );
     368
    286369                if ( ! is_wp_error( $wp_dotorg ) ) {
    287370                        $info['wp-core']['fields']['dotorg_communication'] = array(
    288371                                'label' => __( 'Communication with WordPress.org' ),
    289                                 'value' => sprintf(
    290                                         __( 'WordPress.org is reachable' )
    291                                 ),
     372                                'value' => __( 'WordPress.org is reachable' ),
     373                                'debug' => 'true',
    292374                        );
    293375                } else {
    294376                        $info['wp-core']['fields']['dotorg_communication'] = array(
    class WP_Debug_Data { 
    299381                                        gethostbyname( 'wordpress.org' ),
    300382                                        $wp_dotorg->get_error_message()
    301383                                ),
     384                                'debug' => $wp_dotorg->get_error_message(),
    302385                        );
    303386                }
    304387
    class WP_Debug_Data { 
    350433                        ),
    351434                );
    352435
    353                 $timeout      = __( 'The directory size calculation has timed out. Usually caused by a very large number of sub-directories and files.' );
    354                 $inaccessible = __( 'The size cannot be calculated. The directory is not accessible. Usually caused by invalid permissions.' );
    355                 $size_total   = 0;
     436                $size_total = 0;
    356437
    357438                // Loop over all the directories we want to gather the sizes for.
    358439                foreach ( $size_directories as $size => $attributes ) {
    class WP_Debug_Data { 
    362443                                $dir_size = get_dirsize( $attributes['path'], $max_execution_time );
    363444                        }
    364445
    365                         if ( $dir_size === false ) {
     446                        if ( false === $dir_size ) {
    366447                                // Error reading.
    367                                 $dir_size = $inaccessible;
     448                                $size_directories[ $size ]['size']  = __( 'The size cannot be calculated. The directory is not accessible. Usually caused by invalid permissions.' );
     449                                $size_directories[ $size ]['debug'] = 'not accessible';
     450
    368451                                // Stop total size calculation.
    369452                                $size_total = null;
    370                         } elseif ( $dir_size === null ) {
     453                        } elseif ( null === $dir_size ) {
    371454                                // Timeout.
    372                                 $dir_size = $timeout;
     455                                $size_directories[ $size ]['size']  = __( 'The directory size calculation has timed out. Usually caused by a very large number of sub-directories and files.' );
     456                                $size_directories[ $size ]['debug'] = 'timeout while calculating size';
     457
    373458                                // Stop total size calculation.
    374459                                $size_total = null;
    375460                        } else {
    376461                                $is_subdir = ( strpos( $size_directories[ $size ]['path'], ABSPATH ) === 0 );
    377462
    378463                                // phpcs:ignore WordPress.WP.CapitalPDangit.Misspelled
    379                                 if ( $size_total !== null && ( $size === 'wordpress' || ! $is_subdir ) ) {
     464                                if ( null !== $size_total && ( 'wordpress' === $size || ! $is_subdir ) ) {
    380465                                        $size_total += $dir_size;
    381466                                }
    382467
    383                                 $dir_size = size_format( $dir_size, 2 );
     468                                $size_directories[ $size ]['size']  = size_format( $dir_size, 2 );
     469                                $size_directories[ $size ]['debug'] = $size_directories[ $size ]['size'];
    384470                        }
    385 
    386                         $size_directories[ $size ]['size'] = $dir_size;
    387471                }
    388472
    389                 if ( $size_total !== null && $size_db > 0 ) {
     473                if ( null !== $size_total && $size_db > 0 ) {
    390474                        $size_total = size_format( $size_total + $size_db, 2 );
    391475                } else {
    392                         $size_total = __( 'Total size is not available. Some errors were encountered when determining the size of your installation.' );
     476                        $size_total = 0;
    393477                }
    394478
    395479                $info['wp-paths-sizes']['fields'] = array(
    396                         array(
     480                        'uploads_path'       => array(
    397481                                'label' => __( 'Uploads Directory Location' ),
    398482                                'value' => $size_directories['uploads']['path'],
    399483                        ),
    400                         array(
     484                        'uploads_size'       => array(
    401485                                'label' => __( 'Uploads Directory Size' ),
    402486                                'value' => $size_directories['uploads']['size'],
     487                                'debug' => $size_directories['uploads']['debug'],
    403488                        ),
    404                         array(
     489                        'themes_path'        => array(
    405490                                'label' => __( 'Themes Directory Location' ),
    406491                                'value' => $size_directories['themes']['path'],
    407492                        ),
    408                         array(
     493                        'current_theme_path' => array(
    409494                                'label' => __( 'Current Theme Directory' ),
    410495                                'value' => get_template_directory(),
    411496                        ),
    412                         array(
     497                        'themes_size'        => array(
    413498                                'label' => __( 'Themes Directory Size' ),
    414499                                'value' => $size_directories['themes']['size'],
     500                                'debug' => $size_directories['themes']['debug'],
    415501                        ),
    416                         array(
     502                        'plugins_path'       => array(
    417503                                'label' => __( 'Plugins Directory Location' ),
    418504                                'value' => $size_directories['plugins']['path'],
    419505                        ),
    420                         array(
     506                        'plugins_size'       => array(
    421507                                'label' => __( 'Plugins Directory Size' ),
    422508                                'value' => $size_directories['plugins']['size'],
     509                                'debug' => $size_directories['plugins']['debug'],
    423510                        ),
    424                         array(
     511                        'wordpress_path'     => array(
    425512                                'label' => __( 'WordPress Directory Location' ),
    426513                                'value' => $size_directories['wordpress']['path'],
    427514                        ),
    428                         array(
     515                        'wordpress_size'     => array(
    429516                                'label' => __( 'WordPress Directory Size' ),
    430517                                'value' => $size_directories['wordpress']['size'],
     518                                'debug' => $size_directories['wordpress']['debug'],
    431519                        ),
    432                         array(
     520                        'database_size'      => array(
    433521                                'label' => __( 'Database size' ),
    434522                                'value' => size_format( $size_db, 2 ),
    435523                        ),
    436                         array(
     524                        'total_size'         => array(
    437525                                'label' => __( 'Total installation size' ),
    438                                 'value' => $size_total,
     526                                'value' => $size_total > 0 ? $size_total : __( 'Total size is not available. Some errors were encountered when determining the size of your installation.' ),
     527                                'debug' => $size_total > 0 ? $size_total : 'not available',
    439528                        ),
    440529                );
    441530
    442531                // Get a list of all drop-in replacements.
    443                 $dropins            = get_dropins();
    444                 $dropin_description = _get_dropins();
     532                $dropins = get_dropins();
     533
     534                // Get dropins descriptions.
     535                $dropin_descriptions = _get_dropins();
     536
     537                // Spare few function calls.
     538                $not_available = __( 'Not available' );
     539
    445540                foreach ( $dropins as $dropin_key => $dropin ) {
    446                         $info['wp-dropins']['fields'][ sanitize_key( $dropin_key ) ] = array(
     541                        $info['wp-dropins']['fields'][ sanitize_text_field( $dropin_key ) ] = array(
    447542                                'label' => $dropin_key,
    448                                 'value' => $dropin_description[ $dropin_key ][0],
     543                                'value' => $dropin_descriptions[ $dropin_key ][0],
     544                                'debug' => 'true',
    449545                        );
    450546                }
    451547
    class WP_Debug_Data { 
    463559                } else {
    464560                        $imagick_version = __( 'Not available' );
    465561                }
     562
    466563                $info['wp-media']['fields']['imagick_module_version'] = array(
    467564                        'label' => __( 'ImageMagick version number' ),
    468565                        'value' => ( is_array( $imagick_version ) ? $imagick_version['versionNumber'] : $imagick_version ),
    469566                );
    470                 $info['wp-media']['fields']['imagemagick_version']    = array(
     567
     568                $info['wp-media']['fields']['imagemagick_version'] = array(
    471569                        'label' => __( 'ImageMagick version string' ),
    472570                        'value' => ( is_array( $imagick_version ) ? $imagick_version['versionString'] : $imagick_version ),
    473571                );
    class WP_Debug_Data { 
    475573                // If Imagick is used as our editor, provide some more information about its limitations.
    476574                if ( 'WP_Image_Editor_Imagick' === _wp_image_editor_choose() && isset( $imagick ) && $imagick instanceof Imagick ) {
    477575                        $limits = array(
    478                                 'area'   => ( defined( 'imagick::RESOURCETYPE_AREA' ) ? size_format( $imagick->getResourceLimit( imagick::RESOURCETYPE_AREA ) ) : __( 'Not available' ) ),
    479                                 'disk'   => ( defined( 'imagick::RESOURCETYPE_DISK' ) ? $imagick->getResourceLimit( imagick::RESOURCETYPE_DISK ) : __( 'Not available' ) ),
    480                                 'file'   => ( defined( 'imagick::RESOURCETYPE_FILE' ) ? $imagick->getResourceLimit( imagick::RESOURCETYPE_FILE ) : __( 'Not available' ) ),
    481                                 'map'    => ( defined( 'imagick::RESOURCETYPE_MAP' ) ? size_format( $imagick->getResourceLimit( imagick::RESOURCETYPE_MAP ) ) : __( 'Not available' ) ),
    482                                 'memory' => ( defined( 'imagick::RESOURCETYPE_MEMORY' ) ? size_format( $imagick->getResourceLimit( imagick::RESOURCETYPE_MEMORY ) ) : __( 'Not available' ) ),
    483                                 'thread' => ( defined( 'imagick::RESOURCETYPE_THREAD' ) ? $imagick->getResourceLimit( imagick::RESOURCETYPE_THREAD ) : __( 'Not available' ) ),
     576                                'area'   => ( defined( 'imagick::RESOURCETYPE_AREA' ) ? size_format( $imagick->getResourceLimit( imagick::RESOURCETYPE_AREA ) ) : $not_available ),
     577                                'disk'   => ( defined( 'imagick::RESOURCETYPE_DISK' ) ? $imagick->getResourceLimit( imagick::RESOURCETYPE_DISK ) : $not_available ),
     578                                'file'   => ( defined( 'imagick::RESOURCETYPE_FILE' ) ? $imagick->getResourceLimit( imagick::RESOURCETYPE_FILE ) : $not_available ),
     579                                'map'    => ( defined( 'imagick::RESOURCETYPE_MAP' ) ? size_format( $imagick->getResourceLimit( imagick::RESOURCETYPE_MAP ) ) : $not_available ),
     580                                'memory' => ( defined( 'imagick::RESOURCETYPE_MEMORY' ) ? size_format( $imagick->getResourceLimit( imagick::RESOURCETYPE_MEMORY ) ) : $not_available ),
     581                                'thread' => ( defined( 'imagick::RESOURCETYPE_THREAD' ) ? $imagick->getResourceLimit( imagick::RESOURCETYPE_THREAD ) : $not_available ),
     582                        );
     583
     584                        $limits_debug = array(
     585                                'imagick::RESOURCETYPE_AREA'   => ( defined( 'imagick::RESOURCETYPE_AREA' ) ? size_format( $imagick->getResourceLimit( imagick::RESOURCETYPE_AREA ) ) : 'not available' ),
     586                                'imagick::RESOURCETYPE_DISK'   => ( defined( 'imagick::RESOURCETYPE_DISK' ) ? $imagick->getResourceLimit( imagick::RESOURCETYPE_DISK ) : 'not available' ),
     587                                'imagick::RESOURCETYPE_FILE'   => ( defined( 'imagick::RESOURCETYPE_FILE' ) ? $imagick->getResourceLimit( imagick::RESOURCETYPE_FILE ) : 'not available' ),
     588                                'imagick::RESOURCETYPE_MAP'    => ( defined( 'imagick::RESOURCETYPE_MAP' ) ? size_format( $imagick->getResourceLimit( imagick::RESOURCETYPE_MAP ) ) : 'not available' ),
     589                                'imagick::RESOURCETYPE_MEMORY' => ( defined( 'imagick::RESOURCETYPE_MEMORY' ) ? size_format( $imagick->getResourceLimit( imagick::RESOURCETYPE_MEMORY ) ) : 'not available' ),
     590                                'imagick::RESOURCETYPE_THREAD' => ( defined( 'imagick::RESOURCETYPE_THREAD' ) ? $imagick->getResourceLimit( imagick::RESOURCETYPE_THREAD ) : 'not available' ),
    484591                        );
    485592
    486593                        $info['wp-media']['fields']['imagick_limits'] = array(
    487594                                'label' => __( 'Imagick Resource Limits' ),
    488595                                'value' => $limits,
     596                                'debug' => $limits_debug,
    489597                        );
    490598                }
    491599
    class WP_Debug_Data { 
    495603                } else {
    496604                        $gd = false;
    497605                }
     606
    498607                $info['wp-media']['fields']['gd_version'] = array(
    499608                        'label' => __( 'GD version' ),
    500                         'value' => ( is_array( $gd ) ? $gd['GD Version'] : __( 'Not available' ) ),
     609                        'value' => ( is_array( $gd ) ? $gd['GD Version'] : $not_available ),
     610                        'debug' => ( is_array( $gd ) ? $gd['GD Version'] : 'not available' ),
    501611                );
    502612
    503613                // Get Ghostscript information, if available.
    504614                if ( function_exists( 'exec' ) ) {
    505615                        $gs = exec( 'gs --version' );
    506                         $gs = ( ! empty( $gs ) ? $gs : __( 'Not available' ) );
     616
     617                        if ( empty( $gs ) ) {
     618                                $gs       = $not_available;
     619                                $gs_debug = 'not available';
     620                        } else {
     621                                $gs_debug = $gs;
     622                        }
    507623                } else {
    508                         $gs = __( 'Unable to determine if Ghostscript is installed' );
     624                        $gs       = __( 'Unable to determine if Ghostscript is installed' );
     625                        $gs_debug = 'unknown';
    509626                }
     627
    510628                $info['wp-media']['fields']['ghostscript_version'] = array(
    511629                        'label' => __( 'Ghostscript version' ),
    512630                        'value' => $gs,
     631                        'debug' => $gs_debug,
    513632                );
    514633
    515634                // Populate the server debug fields.
     635                if ( function_exists( 'php_uname' ) ) {
     636                        $server_architecture = sprintf( '%s %s %s', php_uname( 's' ), php_uname( 'r' ), php_uname( 'm' ) );
     637                } else {
     638                        $server_architecture = 'unknown';
     639                }
     640
     641                if ( function_exists( 'phpversion' ) ) {
     642                        $php_version_debug = phpversion();
     643                        // Whether PHP supports 64bit
     644                        $php64bit = ( PHP_INT_SIZE * 8 === 64 );
     645
     646                        $php_version = sprintf(
     647                                '%s %s',
     648                                $php_version_debug,
     649                                ( $php64bit ? __( '(Supports 64bit values)' ) : __( '(Does not support 64bit values)' ) )
     650                        );
     651
     652                        if ( $php64bit ) {
     653                                $php_version_debug .= ' 64bit';
     654                        }
     655                } else {
     656                        $php_version       = __( 'Unable to determine PHP version' );
     657                        $php_version_debug = 'unknown';
     658                }
     659
     660                if ( function_exists( 'php_sapi_name' ) ) {
     661                        $php_sapi = php_sapi_name();
     662                } else {
     663                        $php_sapi = 'unknown';
     664                }
     665
    516666                $info['wp-server']['fields']['server_architecture'] = array(
    517667                        'label' => __( 'Server architecture' ),
    518                         'value' => ( ! function_exists( 'php_uname' ) ? __( 'Unable to determine server architecture' ) : sprintf( '%s %s %s', php_uname( 's' ), php_uname( 'r' ), php_uname( 'm' ) ) ),
     668                        'value' => ( 'unknown' !== $server_architecture ? $server_architecture : __( 'Unable to determine server architecture' ) ),
     669                        'debug' => $server_architecture,
    519670                );
    520671                $info['wp-server']['fields']['httpd_software']      = array(
    521672                        'label' => __( 'Web server' ),
    522673                        'value' => ( isset( $_SERVER['SERVER_SOFTWARE'] ) ? $_SERVER['SERVER_SOFTWARE'] : __( 'Unable to determine what web server software is used' ) ),
     674                        'debug' => ( isset( $_SERVER['SERVER_SOFTWARE'] ) ? $_SERVER['SERVER_SOFTWARE'] : 'unknown' ),
    523675                );
    524676                $info['wp-server']['fields']['php_version']         = array(
    525677                        'label' => __( 'PHP version' ),
    526                         'value' => ( ! function_exists( 'phpversion' ) ? __( 'Unable to determine PHP version' ) : sprintf(
    527                                 '%s %s',
    528                                 phpversion(),
    529                                 ( 64 === PHP_INT_SIZE * 8 ? __( '(Supports 64bit values)' ) : __( '(Does not support 64bit values)' ) )
    530                         )
    531                         ),
     678                        'value' => $php_version,
     679                        'debug' => $php_version_debug,
    532680                );
    533681                $info['wp-server']['fields']['php_sapi']            = array(
    534682                        'label' => __( 'PHP SAPI' ),
    535                         'value' => ( ! function_exists( 'php_sapi_name' ) ? __( 'Unable to determine PHP SAPI' ) : php_sapi_name() ),
     683                        'value' => ( 'unknown' !== $php_sapi ? $php_sapi : __( 'Unable to determine PHP SAPI' ) ),
     684                        'debug' => $php_sapi,
    536685                );
    537686
    538687                // Some servers disable `ini_set()` and `ini_get()`, we check this before trying to get configuration values.
    class WP_Debug_Data { 
    540689                        $info['wp-server']['fields']['ini_get'] = array(
    541690                                'label' => __( 'Server settings' ),
    542691                                'value' => __( 'Unable to determine some settings, as the ini_get() function has been disabled.' ),
     692                                'debug' => 'ini_get() is disabled',
    543693                        );
    544694                } else {
    545695                        $info['wp-server']['fields']['max_input_variables'] = array(
    class WP_Debug_Data { 
    578728                } else {
    579729                        $info['wp-server']['fields']['curl_version'] = array(
    580730                                'label' => __( 'cURL version' ),
    581                                 'value' => __( 'Not available' ),
     731                                'value' => $not_available,
     732                                'debug' => 'not available',
    582733                        );
    583734                }
    584735
     736                // SUHOSIN
     737                $suhosin_loaded = ( extension_loaded( 'suhosin' ) || ( defined( 'SUHOSIN_PATCH' ) && constant( 'SUHOSIN_PATCH' ) ) );
     738
    585739                $info['wp-server']['fields']['suhosin'] = array(
    586740                        'label' => __( 'Is SUHOSIN installed?' ),
    587                         'value' => ( ( extension_loaded( 'suhosin' ) || ( defined( 'SUHOSIN_PATCH' ) && constant( 'SUHOSIN_PATCH' ) ) ) ? __( 'Yes' ) : __( 'No' ) ),
     741                        'value' => ( $suhosin_loaded ? __( 'Yes' ) : __( 'No' ) ),
     742                        'debug' => $suhosin_loaded,
    588743                );
    589744
     745                // Imagick
     746                $imagick_loaded = extension_loaded( 'imagick' );
     747
    590748                $info['wp-server']['fields']['imagick_availability'] = array(
    591749                        'label' => __( 'Is the Imagick library available?' ),
    592                         'value' => ( extension_loaded( 'imagick' ) ? __( 'Yes' ) : __( 'No' ) ),
     750                        'value' => ( $imagick_loaded ? __( 'Yes' ) : __( 'No' ) ),
     751                        'debug' => $imagick_loaded,
    593752                );
    594753
    595754                // Check if a .htaccess file exists.
    class WP_Debug_Data { 
    599758
    600759                        // Filter away the core WordPress rules.
    601760                        $filtered_htaccess_content = trim( preg_replace( '/\# BEGIN WordPress[\s\S]+?# END WordPress/si', '', $htaccess_content ) );
     761                        $filtered_htaccess_content = ! empty( $filtered_htaccess_content );
    602762
    603763                        $info['wp-server']['fields']['htaccess_extra_rules'] = array(
    604764                                'label' => __( 'htaccess rules' ),
    605                                 'value' => ( ! empty( $filtered_htaccess_content ) ? __( 'Custom rules have been added to your htaccess file.' ) : __( 'Your htaccess file contains only core WordPress features.' ) ),
     765                                'value' => ( $filtered_htaccess_content ? __( 'Custom rules have been added to your htaccess file.' ) : __( 'Your htaccess file contains only core WordPress features.' ) ),
     766                                'debug' => $filtered_htaccess_content,
    606767                        );
    607768                }
    608769
    class WP_Debug_Data { 
    646807                        }
    647808                }
    648809
    649                 $info['wp-database']['fields']['extension']       = array(
     810                $info['wp-database']['fields']['extension'] = array(
    650811                        'label' => __( 'Extension' ),
    651812                        'value' => $extension,
    652813                );
    653                 $info['wp-database']['fields']['server_version']  = array(
     814
     815                $info['wp-database']['fields']['server_version'] = array(
    654816                        'label' => __( 'Server version' ),
    655817                        'value' => $server,
    656818                );
    657                 $info['wp-database']['fields']['client_version']  = array(
     819
     820                $info['wp-database']['fields']['client_version'] = array(
    658821                        'label' => __( 'Client version' ),
    659822                        'value' => $client_version,
    660823                );
    661                 $info['wp-database']['fields']['database_user']   = array(
     824
     825                $info['wp-database']['fields']['database_user'] = array(
    662826                        'label'   => __( 'Database user' ),
    663827                        'value'   => $wpdb->dbuser,
    664828                        'private' => true,
    665829                );
    666                 $info['wp-database']['fields']['database_host']   = array(
     830
     831                $info['wp-database']['fields']['database_host'] = array(
    667832                        'label'   => __( 'Database host' ),
    668833                        'value'   => $wpdb->dbhost,
    669834                        'private' => true,
    670835                );
    671                 $info['wp-database']['fields']['database_name']   = array(
     836
     837                $info['wp-database']['fields']['database_name'] = array(
    672838                        'label'   => __( 'Database name' ),
    673839                        'value'   => $wpdb->dbname,
    674840                        'private' => true,
    675841                );
     842
    676843                $info['wp-database']['fields']['database_prefix'] = array(
    677844                        'label'   => __( 'Database prefix' ),
    678845                        'value'   => $wpdb->prefix,
    class WP_Debug_Data { 
    686853                        $plugin_version = $plugin['Version'];
    687854                        $plugin_author  = $plugin['Author'];
    688855
    689                         $plugin_version_string = __( 'No version or author information is available.' );
     856                        $plugin_version_string       = __( 'No version or author information is available.' );
     857                        $plugin_version_string_debug = 'author: (undefined), version: (undefined)';
    690858
    691859                        if ( ! empty( $plugin_version ) && ! empty( $plugin_author ) ) {
    692860                                // translators: 1: Plugin version number. 2: Plugin author name.
    693                                 $plugin_version_string = sprintf( __( 'Version %1$s by %2$s' ), $plugin_version, $plugin_author );
    694                         }
    695                         if ( empty( $plugin_version ) && ! empty( $plugin_author ) ) {
    696                                 // translators: %s: Plugin author name.
    697                                 $plugin_version_string = sprintf( __( 'By %s' ), $plugin_author );
    698                         }
    699                         if ( ! empty( $plugin_version ) && empty( $plugin_author ) ) {
    700                                 // translators: %s: Plugin version number.
    701                                 $plugin_version_string = sprintf( __( 'Version %s' ), $plugin_version );
     861                                $plugin_version_string       = sprintf( __( 'Version %1$s by %2$s' ), $plugin_version, $plugin_author );
     862                                $plugin_version_string_debug = sprintf( 'version: %s, author: %s', $plugin_version, $plugin_author );
     863                        } else {
     864                                if ( ! empty( $plugin_author ) ) {
     865                                        // translators: %s: Plugin author name.
     866                                        $plugin_version_string       = sprintf( __( 'By %s' ), $plugin_author );
     867                                        $plugin_version_string_debug = sprintf( 'author: %s, version: (undefined)', $plugin_author );
     868                                }
     869
     870                                if ( ! empty( $plugin_version ) ) {
     871                                        // translators: %s: Plugin version number.
     872                                        $plugin_version_string       = sprintf( __( 'Version %s' ), $plugin_version );
     873                                        $plugin_version_string_debug = sprintf( 'author: (undefined), version: %s', $plugin_version );
     874                                }
    702875                        }
    703876
    704                         $info['wp-mu-plugins']['fields'][ sanitize_key( $plugin['Name'] ) ] = array(
     877                        $info['wp-mu-plugins']['fields'][ sanitize_text_field( $plugin['Name'] ) ] = array(
    705878                                'label' => $plugin['Name'],
    706879                                'value' => $plugin_version_string,
     880                                'debug' => $plugin_version_string_debug,
    707881                        );
    708882                }
    709883
    class WP_Debug_Data { 
    717891                        $plugin_version = $plugin['Version'];
    718892                        $plugin_author  = $plugin['Author'];
    719893
    720                         $plugin_version_string = __( 'No version or author information is available.' );
     894                        $plugin_version_string       = __( 'No version or author information is available.' );
     895                        $plugin_version_string_debug = 'author: (undefined), version: (undefined)';
    721896
    722897                        if ( ! empty( $plugin_version ) && ! empty( $plugin_author ) ) {
    723898                                // translators: 1: Plugin version number. 2: Plugin author name.
    724                                 $plugin_version_string = sprintf( __( 'Version %1$s by %2$s' ), $plugin_version, $plugin_author );
    725                         }
    726                         if ( empty( $plugin_version ) && ! empty( $plugin_author ) ) {
    727                                 // translators: %s: Plugin author name.
    728                                 $plugin_version_string = sprintf( __( 'By %s' ), $plugin_author );
    729                         }
    730                         if ( ! empty( $plugin_version ) && empty( $plugin_author ) ) {
    731                                 // translators: %s: Plugin version number.
    732                                 $plugin_version_string = sprintf( __( 'Version %s' ), $plugin_version );
     899                                $plugin_version_string       = sprintf( __( 'Version %1$s by %2$s' ), $plugin_version, $plugin_author );
     900                                $plugin_version_string_debug = sprintf( 'version: %s, author: %s', $plugin_version, $plugin_author );
     901                        } else {
     902                                if ( ! empty( $plugin_author ) ) {
     903                                        // translators: %s: Plugin author name.
     904                                        $plugin_version_string       = sprintf( __( 'By %s' ), $plugin_author );
     905                                        $plugin_version_string_debug = sprintf( 'author: %s, version: (undefined)', $plugin_author );
     906                                }
     907
     908                                if ( ! empty( $plugin_version ) ) {
     909                                        // translators: %s: Plugin version number.
     910                                        $plugin_version_string       = sprintf( __( 'Version %s' ), $plugin_version );
     911                                        $plugin_version_string_debug = sprintf( 'author: (undefined), version: %s', $plugin_version );
     912                                }
    733913                        }
    734914
    735915                        if ( array_key_exists( $plugin_path, $plugin_updates ) ) {
    736916                                // translators: %s: Latest plugin version number.
    737                                 $plugin_update_needed = ' ' . sprintf( __( '(Latest version: %s)' ), $plugin_updates[ $plugin_path ]->update->new_version );
    738                         } else {
    739                                 $plugin_update_needed = '';
     917                                $plugin_version_string       .= ' ' . sprintf( __( '(Latest version: %s)' ), $plugin_updates[ $plugin_path ]->update->new_version );
     918                                $plugin_version_string_debug .= sprintf( ' (latest version: %s)', $plugin_updates[ $plugin_path ]->update->new_version );
    740919                        }
    741920
    742                         $info[ $plugin_part ]['fields'][ sanitize_key( $plugin['Name'] ) ] = array(
     921                        $info[ $plugin_part ]['fields'][ sanitize_text_field( $plugin['Name'] ) ] = array(
    743922                                'label' => $plugin['Name'],
    744                                 'value' => $plugin_version_string . $plugin_update_needed,
     923                                'value' => $plugin_version_string,
     924                                'debug' => $plugin_version_string_debug,
    745925                        );
    746926                }
    747927
    748928                // Populate the section for the currently active theme.
    749929                global $_wp_theme_features;
    750930                $theme_features = array();
     931
    751932                if ( ! empty( $_wp_theme_features ) ) {
    752933                        foreach ( $_wp_theme_features as $feature => $options ) {
    753934                                $theme_features[] = $feature;
    class WP_Debug_Data { 
    757938                $active_theme  = wp_get_theme();
    758939                $theme_updates = get_theme_updates();
    759940
     941                // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase
     942                $active_theme_version       = $active_theme->Version;
     943                $active_theme_version_debug = $active_theme_version;
     944
    760945                if ( array_key_exists( $active_theme->stylesheet, $theme_updates ) ) {
     946                        $theme_update_new_version = $theme_updates[ $active_theme->stylesheet ]->update['new_version'];
     947
    761948                        // translators: %s: Latest theme version number.
    762                         $theme_update_needed_active = ' ' . sprintf( __( '(Latest version: %s)' ), $theme_updates[ $active_theme->stylesheet ]->update['new_version'] );
    763                 } else {
    764                         $theme_update_needed_active = '';
     949                        $active_theme_version       .= ' ' . sprintf( __( '(Latest version: %s)' ), $theme_update_new_version );
     950                        $active_theme_version_debug .= sprintf( ' (latest version: %s)', $theme_update_new_version );
    765951                }
    766952
     953                $active_theme_author_uri = $active_theme->offsetGet( 'Author URI' );
     954
    767955                $info['wp-active-theme']['fields'] = array(
    768956                        'name'           => array(
    769957                                'label' => __( 'Name' ),
    class WP_Debug_Data { 
    772960                        ),
    773961                        'version'        => array(
    774962                                'label' => __( 'Version' ),
    775                                 // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase
    776                                 'value' => $active_theme->Version . $theme_update_needed_active,
     963                                'value' => $active_theme_version,
     964                                'debug' => $active_theme_version_debug,
    777965                        ),
    778966                        'author'         => array(
    779967                                'label' => __( 'Author' ),
    class WP_Debug_Data { 
    782970                        ),
    783971                        'author_website' => array(
    784972                                'label' => __( 'Author website' ),
    785                                 'value' => ( $active_theme->offsetGet( 'Author URI' ) ? $active_theme->offsetGet( 'Author URI' ) : __( 'Undefined' ) ),
     973                                'value' => ( $active_theme_author_uri ? $active_theme_author_uri : __( 'Undefined' ) ),
     974                                'debug' => ( $active_theme_author_uri ? $active_theme_author_uri : '(undefined)' ),
    786975                        ),
    787976                        'parent_theme'   => array(
    788977                                'label' => __( 'Parent theme' ),
    789978                                'value' => ( $active_theme->parent_theme ? $active_theme->parent_theme : __( 'None' ) ),
     979                                'debug' => ( $active_theme->parent_theme ? $active_theme->parent_theme : 'none' ),
    790980                        ),
    791981                        'theme_features' => array(
    792982                                'label' => __( 'Theme features' ),
    class WP_Debug_Data { 
    799989
    800990                foreach ( $all_themes as $theme_slug => $theme ) {
    801991                        // Ignore the currently active theme from the list of all themes.
    802                         if ( $active_theme->stylesheet == $theme_slug ) {
     992                        if ( $active_theme->stylesheet === $theme_slug ) {
    803993                                continue;
    804994                        }
    805995                        // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase
    class WP_Debug_Data { 
    807997                        // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase
    808998                        $theme_author = $theme->Author;
    809999
    810                         $theme_version_string = __( 'No version or author information is available.' );
     1000                        // Sanitize
     1001                        $theme_author = wp_kses( $theme_author, array() );
     1002
     1003                        $theme_version_string       = __( 'No version or author information is available.' );
     1004                        $theme_version_string_debug = 'undefined';
    8111005
    8121006                        if ( ! empty( $theme_version ) && ! empty( $theme_author ) ) {
    8131007                                // translators: 1: Theme version number. 2: Theme author name.
    814                                 $theme_version_string = sprintf( __( 'Version %1$s by %2$s' ), $theme_version, wp_kses( $theme_author, array() ) );
    815                         }
    816                         if ( empty( $theme_version ) && ! empty( $theme_author ) ) {
    817                                 // translators: %s: Theme author name.
    818                                 $theme_version_string = sprintf( __( 'By %s' ), wp_kses( $theme_author, array() ) );
    819                         }
    820                         if ( ! empty( $theme_version ) && empty( $theme_author ) ) {
    821                                 // translators: %s: Theme version number.
    822                                 $theme_version_string = sprintf( __( 'Version %s' ), $theme_version );
     1008                                $theme_version_string       = sprintf( __( 'Version %1$s by %2$s' ), $theme_version, $theme_author );
     1009                                $theme_version_string_debug = sprintf( 'version: %s, author: %s', $theme_version, $theme_author );
     1010                        } else {
     1011                                if ( ! empty( $theme_author ) ) {
     1012                                        // translators: %s: Theme author name.
     1013                                        $theme_version_string       = sprintf( __( 'By %s' ), $theme_author );
     1014                                        $theme_version_string_debug = sprintf( 'author: %s, version: (undefined)', $theme_author );
     1015                                }
     1016
     1017                                if ( ! empty( $theme_version ) ) {
     1018                                        // translators: %s: Theme version number.
     1019                                        $theme_version_string       = sprintf( __( 'Version %s' ), $theme_version );
     1020                                        $theme_version_string_debug = sprintf( 'author: (undefined), version: %s', $theme_version );
     1021                                }
    8231022                        }
    8241023
    8251024                        if ( array_key_exists( $theme_slug, $theme_updates ) ) {
    8261025                                // translators: %s: Latest theme version number.
    827                                 $theme_update_needed = ' ' . sprintf( __( '(Latest version: %s)' ), $theme_updates[ $theme_slug ]->update['new_version'] );
    828                         } else {
    829                                 $theme_update_needed = '';
     1026                                $theme_version_string       .= ' ' . sprintf( __( '(Latest version: %s)' ), $theme_updates[ $theme_slug ]->update['new_version'] );
     1027                                $theme_version_string_debug .= sprintf( ' (latest version: %s)', $theme_updates[ $theme_slug ]->update['new_version'] );
    8301028                        }
    8311029
    832                         $info['wp-themes']['fields'][ sanitize_key( $theme->Name ) ] = array(
     1030                        // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase
     1031                        $info['wp-themes']['fields'][ sanitize_text_field( $theme->Name ) ] = array(
    8331032                                'label' => sprintf(
    8341033                                        // translators: 1: Theme name. 2: Theme slug.
    8351034                                        __( '%1$s (%2$s)' ),
    class WP_Debug_Data { 
    8371036                                        $theme->Name,
    8381037                                        $theme_slug
    8391038                                ),
    840                                 'value' => $theme_version_string . $theme_update_needed,
     1039                                'value' => $theme_version_string,
     1040                                'debug' => $theme_version_string_debug,
    8411041                        );
    8421042                }
    8431043
    8441044                // Add more filesystem checks
    8451045                if ( defined( 'WPMU_PLUGIN_DIR' ) && is_dir( WPMU_PLUGIN_DIR ) ) {
    846                         $info['wp-filesystem']['fields']['mu_plugin_directory'] = array(
     1046                        $is_writable_wpmu_plugin_dir = wp_is_writable( WPMU_PLUGIN_DIR );
     1047
     1048                        $info['wp-filesystem']['fields']['mu-plugins'] = array(
    8471049                                'label' => __( 'The must use plugins directory' ),
    848                                 'value' => ( wp_is_writable( WPMU_PLUGIN_DIR ) ? __( 'Writable' ) : __( 'Not writable' ) ),
     1050                                'value' => ( $is_writable_wpmu_plugin_dir ? __( 'Writable' ) : __( 'Not writable' ) ),
     1051                                'debug' => ( $is_writable_wpmu_plugin_dir ? 'writable' : 'not writable' ),
    8491052                        );
    8501053                }
    8511054
    8521055                /**
    853                  * Add or modify new debug sections.
     1056                 * Add or modify the debug information.
    8541057                 *
    855                  * Plugin or themes may wish to introduce their own debug information without creating additional admin pages for this
    856                  * kind of information as it is rarely needed, they can then utilize this filter to introduce their own sections.
     1058                 * Plugin or themes may wish to introduce their own debug information without creating additional admin pages
     1059                 * they can utilize this filter to introduce their own sections or add more data to existing sections.
    8571060                 *
    858                  * Array keys added by core are all prefixed with `wp-`, plugins and themes are encouraged to use their own slug as
    859                  * a prefix, both for consistency as well as avoiding key collisions.
     1061                 * Array keys for sections added by core are all prefixed with `wp-`, plugins and themes should use their own slug as
     1062                 * a prefix, both for consistency as well as avoiding key collisions. Note that the array keys are used as labels
     1063                 * for the copied data.
    8601064                 *
    8611065                 * @since 5.2.0
    8621066                 *
    8631067                 * @param array $args {
    8641068                 *     The debug information to be added to the core information page.
    8651069                 *
     1070                 *     This is an associative multi-dimensional array, up to three levels deep. The topmost array holds the sections.
     1071                 *     Each section has a `$fields` associative array (see below), and each `$value` in `$fields` can be
     1072                 *     another associative array of name/value pairs when there is more structured data to display.
     1073                 *
    8661074                 *     @type string  $label        The title for this section of the debug output.
    8671075                 *     @type string  $description  Optional. A description for your information section which may contain basic HTML
    8681076                 *                                 markup: `em`, `strong` and `a` for linking to documentation or putting emphasis.
    8691077                 *     @type boolean $show_count   Optional. If set to `true` the amount of fields will be included in the title for
    8701078                 *                                 this section.
    8711079                 *     @type boolean $private      Optional. If set to `true` the section and all associated fields will be excluded
    872                  *                                 from the copy-paste text area.
     1080                 *                                 from the copied data.
    8731081                 *     @type array   $fields {
    8741082                 *         An associative array containing the data to be displayed.
    8751083                 *
    8761084                 *         @type string  $label    The label for this piece of information.
    877                  *         @type string  $value    The output that is of interest for this field.
    878                  *         @type boolean $private  Optional. If set to `true` the field will not be included in the copy-paste text area
    879                  *                                 on top of the page, allowing you to show, for example, API keys here.
     1085                 *         @type string  $value    The output that is displayed for this field. Text should be translated. Can be
     1086                 *                                 an associative array that is displayed as name/value pairs.
     1087                 *         @type string  $debug    Optional. The output that is used for this field when the user copies the data.
     1088                 *                                 It should be more concise and not translated. If not set, the content of `$value` is used.
     1089                 *                                 Note that the array keys are used as labels for the copied data.
     1090                 *         @type boolean $private  Optional. If set to `true` the field will not be included in the copied data
     1091                 *                                 allowing you to show, for example, API keys here.
    8801092                 *     }
    8811093                 * }
    8821094                 */
    8831095                $info = apply_filters( 'debug_information', $info );
    8841096
    885                 if ( ! empty( $locale ) ) {
    886                         // Change the language used for translations
    887                         if ( $switched_locale ) {
    888                                 restore_previous_locale();
    889                         }
    890                 }
    891 
    8921097                return $info;
    8931098        }
    8941099
    class WP_Debug_Data { 
    8981103         * @since 5.2.0
    8991104         *
    9001105         * @param array $info_array Information gathered from the `WP_Debug_Data::debug_data` function.
    901          * @param string $type      Optional. The data type to format the information as. Default 'text'.
     1106         * @param string $type      The data type to return, either 'info' or 'debug'.
    9021107         * @return string The formatted data.
    9031108         */
    904         public static function format( $info_array, $type = 'text' ) {
     1109        public static function format( $info_array, $type ) {
    9051110                $return = "`\n";
    9061111
    9071112                foreach ( $info_array as $section => $details ) {
    class WP_Debug_Data { 
    9101115                                continue;
    9111116                        }
    9121117
     1118                        $section_label = 'debug' === $type ? $section : $details['label'];
     1119
    9131120                        $return .= sprintf(
    9141121                                "### %s%s ###\n\n",
    915                                 $details['label'],
     1122                                $section_label,
    9161123                                ( isset( $details['show_count'] ) && $details['show_count'] ? sprintf( ' (%d)', count( $details['fields'] ) ) : '' )
    9171124                        );
    9181125
    919                         foreach ( $details['fields'] as $field ) {
     1126                        foreach ( $details['fields'] as $field_name => $field ) {
    9201127                                if ( isset( $field['private'] ) && true === $field['private'] ) {
    9211128                                        continue;
    9221129                                }
    9231130
    924                                 $values = $field['value'];
    925                                 if ( is_array( $field['value'] ) ) {
    926                                         $values = '';
     1131                                if ( 'debug' === $type && isset( $field['debug'] ) ) {
     1132                                        $debug_data = $field['debug'];
     1133                                } else {
     1134                                        $debug_data = $field['value'];
     1135                                }
     1136
     1137                                // Can be array, one level deep only.
     1138                                if ( is_array( $debug_data ) ) {
     1139                                        $value = '';
    9271140
    9281141                                        foreach ( $field['value'] as $name => $value ) {
    929                                                 $values .= sprintf(
    930                                                         "\n\t%s: %s",
    931                                                         $name,
    932                                                         $value
    933                                                 );
     1142                                                $value .= sprintf( "\n\t%s: %s", $name, $value );
    9341143                                        }
     1144                                } elseif ( is_bool( $debug_data ) ) {
     1145                                        $value = $debug_data ? 'true' : 'false';
     1146                                } elseif ( empty( $debug_data ) && '0' !== $debug_data ) {
     1147                                        $value = 'undefined';
     1148                                } else {
     1149                                        $value = $debug_data;
    9351150                                }
    9361151
    937                                 $return .= sprintf(
    938                                         "%s: %s\n",
    939                                         $field['label'],
    940                                         $values
    941                                 );
     1152                                if ( 'debug' === $type ) {
     1153                                        $label = $field_name;
     1154                                } else {
     1155                                        $label = $field['label'];
     1156                                }
     1157
     1158                                $return .= sprintf( "%s: %s\n", $label, $value );
    9421159                        }
     1160
    9431161                        $return .= "\n";
    9441162                }
    9451163
  • src/wp-admin/site-health-info.php

    diff --git a/src/wp-admin/site-health-info.php b/src/wp-admin/site-health-info.php
    index 1ab31f64af..1fab8d1aef 100644
    a b require_once( ABSPATH . 'wp-admin/admin-header.php' ); 
    6666        <?php
    6767        WP_Debug_Data::check_for_updates();
    6868
    69         $info         = WP_Debug_Data::debug_data();
    70         $english_info = '';
    71         if ( 0 !== strpos( get_user_locale(), 'en' ) ) {
    72                 $english_info = WP_Debug_Data::debug_data( 'en_US' );
    73         }
     69        $info = WP_Debug_Data::debug_data();
     70
    7471        ?>
    7572
    7673        <h2>
    require_once( ABSPATH . 'wp-admin/admin-header.php' ); 
    8683
    8784        <div class="site-health-copy-buttons">
    8885                <div class="copy-button-wrapper">
    89                         <button type="button" class="button button-primary copy-button" data-clipboard-text="<?php echo esc_attr( WP_Debug_Data::format( $info, 'text' ) ); ?>"><?php _e( 'Copy site info to clipboard' ); ?></button>
     86                        <button type="button" class="button copy-button" data-clipboard-text="<?php echo esc_attr( WP_Debug_Data::format( $info, 'debug' ) ); ?>">
     87                                <?php _e( 'Copy site info to clipboard' ); ?>
     88                        </button>
    9089                        <span class="success" aria-hidden="true">Copied!</span>
    9190                </div>
    92                 <?php if ( $english_info ) : ?>
    93                         <div class="copy-button-wrapper">
    94                                 <button type="button" class="button copy-button" data-clipboard-text="<?php echo esc_attr( WP_Debug_Data::format( $english_info, 'text' ) ); ?>"><?php _e( 'Copy site info to clipboard (English)' ); ?></button>
    95                                 <span class="success" aria-hidden="true">Copied!</span>
    96                         </div>
    97                 <?php endif; ?>
    9891        </div>
    9992
    10093        <div id="health-check-debug" class="health-check-accordion">