Make WordPress Core

Changeset 59172


Ignore:
Timestamp:
10/04/2024 10:10:46 PM (2 months ago)
Author:
dmsnell
Message:

WP_Debug_Data: Extract wp-plugins data into separate methods.

This is the eighth part in a larger modularization of the data in WP_Debug_Data. Previously this was a single massive method drawing in debug data from various groups of related data, where the groups were independent from each other.

This patch separates the eighth and ninth of twelve groups, the wp-plugins-active and wp-plugins-inactive info, into separate methods focused on that data.

Unlike the other patches in this series, the plugins data comes from a single source and is separated out into separate debug sections, so the active and inactive methods call a new shared method which provides raw data for both. Optimizations and refactors may occur in follow-up tickets.

This work precedes changes to make the WP_Debug_Data class more extensible for better use by plugin and theme code.

Developed in https://github.com/wordpress/wordpress-develop/pull/7458
Discussed in https://core.trac.wordpress.org/ticket/61648

Props apermo, dmsnell.
See #61648.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-admin/includes/class-wp-debug-data.php

    r59166 r59172  
    8383            'wp-themes-inactive'  => array(),
    8484            'wp-mu-plugins'       => self::get_wp_mu_plugins(),
    85             'wp-plugins-active'   => array(),
    86             'wp-plugins-inactive' => array(),
     85            'wp-plugins-active'   => self::get_wp_plugins_active(),
     86            'wp-plugins-inactive' => self::get_wp_plugins_inactive(),
    8787            'wp-media'            => self::get_wp_media(),
    8888            'wp-server'           => self::get_wp_server(),
     
    185185        $info['wp-themes-inactive'] = array(
    186186            'label'      => __( 'Inactive Themes' ),
    187             'show_count' => true,
    188             'fields'     => array(),
    189         );
    190 
    191         $info['wp-plugins-active'] = array(
    192             'label'      => __( 'Active Plugins' ),
    193             'show_count' => true,
    194             'fields'     => array(),
    195         );
    196 
    197         $info['wp-plugins-inactive'] = array(
    198             'label'      => __( 'Inactive Plugins' ),
    199187            'show_count' => true,
    200188            'fields'     => array(),
     
    323311                    'debug' => 'loading...',
    324312                ),
    325             );
    326         }
    327 
    328         // List all available plugins.
    329         $plugins        = get_plugins();
    330         $plugin_updates = get_plugin_updates();
    331         $transient      = get_site_transient( 'update_plugins' );
    332 
    333         $auto_updates = array();
    334 
    335         $auto_updates_enabled = wp_is_auto_update_enabled_for_type( 'plugin' );
    336 
    337         if ( $auto_updates_enabled ) {
    338             $auto_updates = (array) get_site_option( 'auto_update_plugins', array() );
    339         }
    340 
    341         foreach ( $plugins as $plugin_path => $plugin ) {
    342             $plugin_part = ( is_plugin_active( $plugin_path ) ) ? 'wp-plugins-active' : 'wp-plugins-inactive';
    343 
    344             $plugin_version = $plugin['Version'];
    345             $plugin_author  = $plugin['Author'];
    346 
    347             $plugin_version_string       = __( 'No version or author information is available.' );
    348             $plugin_version_string_debug = 'author: (undefined), version: (undefined)';
    349 
    350             if ( ! empty( $plugin_version ) && ! empty( $plugin_author ) ) {
    351                 /* translators: 1: Plugin version number. 2: Plugin author name. */
    352                 $plugin_version_string       = sprintf( __( 'Version %1$s by %2$s' ), $plugin_version, $plugin_author );
    353                 $plugin_version_string_debug = sprintf( 'version: %s, author: %s', $plugin_version, $plugin_author );
    354             } else {
    355                 if ( ! empty( $plugin_author ) ) {
    356                     /* translators: %s: Plugin author name. */
    357                     $plugin_version_string       = sprintf( __( 'By %s' ), $plugin_author );
    358                     $plugin_version_string_debug = sprintf( 'author: %s, version: (undefined)', $plugin_author );
    359                 }
    360 
    361                 if ( ! empty( $plugin_version ) ) {
    362                     /* translators: %s: Plugin version number. */
    363                     $plugin_version_string       = sprintf( __( 'Version %s' ), $plugin_version );
    364                     $plugin_version_string_debug = sprintf( 'author: (undefined), version: %s', $plugin_version );
    365                 }
    366             }
    367 
    368             if ( array_key_exists( $plugin_path, $plugin_updates ) ) {
    369                 /* translators: %s: Latest plugin version number. */
    370                 $plugin_version_string       .= ' ' . sprintf( __( '(Latest version: %s)' ), $plugin_updates[ $plugin_path ]->update->new_version );
    371                 $plugin_version_string_debug .= sprintf( ' (latest version: %s)', $plugin_updates[ $plugin_path ]->update->new_version );
    372             }
    373 
    374             if ( $auto_updates_enabled ) {
    375                 if ( isset( $transient->response[ $plugin_path ] ) ) {
    376                     $item = $transient->response[ $plugin_path ];
    377                 } elseif ( isset( $transient->no_update[ $plugin_path ] ) ) {
    378                     $item = $transient->no_update[ $plugin_path ];
    379                 } else {
    380                     $item = array(
    381                         'id'            => $plugin_path,
    382                         'slug'          => '',
    383                         'plugin'        => $plugin_path,
    384                         'new_version'   => '',
    385                         'url'           => '',
    386                         'package'       => '',
    387                         'icons'         => array(),
    388                         'banners'       => array(),
    389                         'banners_rtl'   => array(),
    390                         'tested'        => '',
    391                         'requires_php'  => '',
    392                         'compatibility' => new stdClass(),
    393                     );
    394                     $item = wp_parse_args( $plugin, $item );
    395                 }
    396 
    397                 $auto_update_forced = wp_is_auto_update_forced_for_item( 'plugin', null, (object) $item );
    398 
    399                 if ( ! is_null( $auto_update_forced ) ) {
    400                     $enabled = $auto_update_forced;
    401                 } else {
    402                     $enabled = in_array( $plugin_path, $auto_updates, true );
    403                 }
    404 
    405                 if ( $enabled ) {
    406                     $auto_updates_string = __( 'Auto-updates enabled' );
    407                 } else {
    408                     $auto_updates_string = __( 'Auto-updates disabled' );
    409                 }
    410 
    411                 /**
    412                  * Filters the text string of the auto-updates setting for each plugin in the Site Health debug data.
    413                  *
    414                  * @since 5.5.0
    415                  *
    416                  * @param string $auto_updates_string The string output for the auto-updates column.
    417                  * @param string $plugin_path         The path to the plugin file.
    418                  * @param array  $plugin              An array of plugin data.
    419                  * @param bool   $enabled             Whether auto-updates are enabled for this item.
    420                  */
    421                 $auto_updates_string = apply_filters( 'plugin_auto_update_debug_string', $auto_updates_string, $plugin_path, $plugin, $enabled );
    422 
    423                 $plugin_version_string       .= ' | ' . $auto_updates_string;
    424                 $plugin_version_string_debug .= ', ' . $auto_updates_string;
    425             }
    426 
    427             $info[ $plugin_part ]['fields'][ sanitize_text_field( $plugin['Name'] ) ] = array(
    428                 'label' => $plugin['Name'],
    429                 'value' => $plugin_version_string,
    430                 'debug' => $plugin_version_string_debug,
    431313            );
    432314        }
     
    12901172
    12911173    /**
     1174     * Gets the WordPress active plugins section of the debug data.
     1175     *
     1176     * @since 6.7.0
     1177     *
     1178     * @return array
     1179     */
     1180    private static function get_wp_plugins_active(): array {
     1181        return array(
     1182            'label'      => __( 'Active Plugins' ),
     1183            'show_count' => true,
     1184            'fields'     => self::get_wp_plugins_raw_data()['wp-plugins-active'],
     1185        );
     1186    }
     1187
     1188    /**
     1189     * Gets the WordPress inactive plugins section of the debug data.
     1190     *
     1191     * @since 6.7.0
     1192     *
     1193     * @return array
     1194     */
     1195    private static function get_wp_plugins_inactive(): array {
     1196        return array(
     1197            'label'      => __( 'Inactive Plugins' ),
     1198            'show_count' => true,
     1199            'fields'     => self::get_wp_plugins_raw_data()['wp-plugins-inactive'],
     1200        );
     1201    }
     1202
     1203    /**
     1204     * Gets the raw plugin data for the WordPress active and inactive sections of the debug data.
     1205     *
     1206     * @since 6.7.0
     1207     *
     1208     * @return array
     1209     */
     1210    private static function get_wp_plugins_raw_data(): array {
     1211        // List all available plugins.
     1212        $plugins        = get_plugins();
     1213        $plugin_updates = get_plugin_updates();
     1214        $transient      = get_site_transient( 'update_plugins' );
     1215
     1216        $auto_updates = array();
     1217        $fields       = array(
     1218            'wp-plugins-active'   => array(),
     1219            'wp-plugins-inactive' => array(),
     1220        );
     1221
     1222        $auto_updates_enabled = wp_is_auto_update_enabled_for_type( 'plugin' );
     1223
     1224        if ( $auto_updates_enabled ) {
     1225            $auto_updates = (array) get_site_option( 'auto_update_plugins', array() );
     1226        }
     1227
     1228        foreach ( $plugins as $plugin_path => $plugin ) {
     1229            $plugin_part = ( is_plugin_active( $plugin_path ) ) ? 'wp-plugins-active' : 'wp-plugins-inactive';
     1230
     1231            $plugin_version = $plugin['Version'];
     1232            $plugin_author  = $plugin['Author'];
     1233
     1234            $plugin_version_string       = __( 'No version or author information is available.' );
     1235            $plugin_version_string_debug = 'author: (undefined), version: (undefined)';
     1236
     1237            if ( ! empty( $plugin_version ) && ! empty( $plugin_author ) ) {
     1238                /* translators: 1: Plugin version number. 2: Plugin author name. */
     1239                $plugin_version_string       = sprintf( __( 'Version %1$s by %2$s' ), $plugin_version, $plugin_author );
     1240                $plugin_version_string_debug = sprintf( 'version: %s, author: %s', $plugin_version, $plugin_author );
     1241            } else {
     1242                if ( ! empty( $plugin_author ) ) {
     1243                    /* translators: %s: Plugin author name. */
     1244                    $plugin_version_string       = sprintf( __( 'By %s' ), $plugin_author );
     1245                    $plugin_version_string_debug = sprintf( 'author: %s, version: (undefined)', $plugin_author );
     1246                }
     1247
     1248                if ( ! empty( $plugin_version ) ) {
     1249                    /* translators: %s: Plugin version number. */
     1250                    $plugin_version_string       = sprintf( __( 'Version %s' ), $plugin_version );
     1251                    $plugin_version_string_debug = sprintf( 'author: (undefined), version: %s', $plugin_version );
     1252                }
     1253            }
     1254
     1255            if ( array_key_exists( $plugin_path, $plugin_updates ) ) {
     1256                /* translators: %s: Latest plugin version number. */
     1257                $plugin_version_string       .= ' ' . sprintf( __( '(Latest version: %s)' ), $plugin_updates[ $plugin_path ]->update->new_version );
     1258                $plugin_version_string_debug .= sprintf( ' (latest version: %s)', $plugin_updates[ $plugin_path ]->update->new_version );
     1259            }
     1260
     1261            if ( $auto_updates_enabled ) {
     1262                if ( isset( $transient->response[ $plugin_path ] ) ) {
     1263                    $item = $transient->response[ $plugin_path ];
     1264                } elseif ( isset( $transient->no_update[ $plugin_path ] ) ) {
     1265                    $item = $transient->no_update[ $plugin_path ];
     1266                } else {
     1267                    $item = array(
     1268                        'id'            => $plugin_path,
     1269                        'slug'          => '',
     1270                        'plugin'        => $plugin_path,
     1271                        'new_version'   => '',
     1272                        'url'           => '',
     1273                        'package'       => '',
     1274                        'icons'         => array(),
     1275                        'banners'       => array(),
     1276                        'banners_rtl'   => array(),
     1277                        'tested'        => '',
     1278                        'requires_php'  => '',
     1279                        'compatibility' => new stdClass(),
     1280                    );
     1281                    $item = wp_parse_args( $plugin, $item );
     1282                }
     1283
     1284                $auto_update_forced = wp_is_auto_update_forced_for_item( 'plugin', null, (object) $item );
     1285
     1286                if ( ! is_null( $auto_update_forced ) ) {
     1287                    $enabled = $auto_update_forced;
     1288                } else {
     1289                    $enabled = in_array( $plugin_path, $auto_updates, true );
     1290                }
     1291
     1292                if ( $enabled ) {
     1293                    $auto_updates_string = __( 'Auto-updates enabled' );
     1294                } else {
     1295                    $auto_updates_string = __( 'Auto-updates disabled' );
     1296                }
     1297
     1298                /**
     1299                 * Filters the text string of the auto-updates setting for each plugin in the Site Health debug data.
     1300                 *
     1301                 * @since 5.5.0
     1302                 *
     1303                 * @param string $auto_updates_string The string output for the auto-updates column.
     1304                 * @param string $plugin_path         The path to the plugin file.
     1305                 * @param array  $plugin              An array of plugin data.
     1306                 * @param bool   $enabled             Whether auto-updates are enabled for this item.
     1307                 */
     1308                $auto_updates_string = apply_filters( 'plugin_auto_update_debug_string', $auto_updates_string, $plugin_path, $plugin, $enabled );
     1309
     1310                $plugin_version_string       .= ' | ' . $auto_updates_string;
     1311                $plugin_version_string_debug .= ', ' . $auto_updates_string;
     1312            }
     1313
     1314            $fields[ $plugin_part ][ sanitize_text_field( $plugin['Name'] ) ] = array(
     1315                'label' => $plugin['Name'],
     1316                'value' => $plugin_version_string,
     1317                'debug' => $plugin_version_string_debug,
     1318            );
     1319        }
     1320
     1321        return $fields;
     1322    }
     1323
     1324    /**
    12921325     * Gets the WordPress constants section of the debug data.
    12931326     *
Note: See TracChangeset for help on using the changeset viewer.