Make WordPress Core

Changeset 59060


Ignore:
Timestamp:
09/18/2024 07:10:56 PM (7 months ago)
Author:
dmsnell
Message:

WP_Debug_Data: Extract wp-media data into separate method.

This is the sixth 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 sixth of twelve groups, the wp-media info, into a separate method focused on that data.

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/7356
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

    r59011 r59060  
    8585            'wp-plugins-active'   => array(),
    8686            'wp-plugins-inactive' => array(),
    87             'wp-media'            => array(),
     87            'wp-media'            => self::get_wp_media(),
    8888            'wp-server'           => self::get_wp_server(),
    8989            'wp-database'         => self::get_wp_database(),
     
    210210            'show_count' => true,
    211211            'fields'     => array(),
    212         );
    213 
    214         $info['wp-media'] = array(
    215             'label'  => __( 'Media Handling' ),
    216             'fields' => array(),
    217212        );
    218213
     
    348343        $dropin_descriptions = _get_dropins();
    349344
    350         // Spare few function calls.
    351         $not_available = __( 'Not available' );
    352 
    353345        foreach ( $dropins as $dropin_key => $dropin ) {
    354346            $info['wp-dropins']['fields'][ sanitize_text_field( $dropin_key ) ] = array(
     
    358350            );
    359351        }
    360 
    361         // Populate the media fields.
    362         $info['wp-media']['fields']['image_editor'] = array(
    363             'label' => __( 'Active editor' ),
    364             'value' => _wp_image_editor_choose(),
    365         );
    366 
    367         // Get ImageMagic information, if available.
    368         if ( class_exists( 'Imagick' ) ) {
    369             // Save the Imagick instance for later use.
    370             $imagick             = new Imagick();
    371             $imagemagick_version = $imagick->getVersion();
    372         } else {
    373             $imagemagick_version = __( 'Not available' );
    374         }
    375 
    376         $info['wp-media']['fields']['imagick_module_version'] = array(
    377             'label' => __( 'ImageMagick version number' ),
    378             'value' => ( is_array( $imagemagick_version ) ? $imagemagick_version['versionNumber'] : $imagemagick_version ),
    379         );
    380 
    381         $info['wp-media']['fields']['imagemagick_version'] = array(
    382             'label' => __( 'ImageMagick version string' ),
    383             'value' => ( is_array( $imagemagick_version ) ? $imagemagick_version['versionString'] : $imagemagick_version ),
    384         );
    385 
    386         $imagick_version = phpversion( 'imagick' );
    387 
    388         $info['wp-media']['fields']['imagick_version'] = array(
    389             'label' => __( 'Imagick version' ),
    390             'value' => ( $imagick_version ) ? $imagick_version : __( 'Not available' ),
    391         );
    392 
    393         if ( ! function_exists( 'ini_get' ) ) {
    394             $info['wp-media']['fields']['ini_get'] = array(
    395                 'label' => __( 'File upload settings' ),
    396                 'value' => sprintf(
    397                     /* translators: %s: ini_get() */
    398                     __( 'Unable to determine some settings, as the %s function has been disabled.' ),
    399                     'ini_get()'
    400                 ),
    401                 'debug' => 'ini_get() is disabled',
    402             );
    403         } else {
    404             // Get the PHP ini directive values.
    405             $file_uploads        = ini_get( 'file_uploads' );
    406             $post_max_size       = ini_get( 'post_max_size' );
    407             $upload_max_filesize = ini_get( 'upload_max_filesize' );
    408             $max_file_uploads    = ini_get( 'max_file_uploads' );
    409             $effective           = min( wp_convert_hr_to_bytes( $post_max_size ), wp_convert_hr_to_bytes( $upload_max_filesize ) );
    410 
    411             // Add info in Media section.
    412             $info['wp-media']['fields']['file_uploads']        = array(
    413                 'label' => __( 'File uploads' ),
    414                 'value' => $file_uploads ? __( 'Enabled' ) : __( 'Disabled' ),
    415                 'debug' => $file_uploads,
    416             );
    417             $info['wp-media']['fields']['post_max_size']       = array(
    418                 'label' => __( 'Max size of post data allowed' ),
    419                 'value' => $post_max_size,
    420             );
    421             $info['wp-media']['fields']['upload_max_filesize'] = array(
    422                 'label' => __( 'Max size of an uploaded file' ),
    423                 'value' => $upload_max_filesize,
    424             );
    425             $info['wp-media']['fields']['max_effective_size']  = array(
    426                 'label' => __( 'Max effective file size' ),
    427                 'value' => size_format( $effective ),
    428             );
    429             $info['wp-media']['fields']['max_file_uploads']    = array(
    430                 'label' => __( 'Max simultaneous file uploads' ),
    431                 'value' => $max_file_uploads,
    432             );
    433         }
    434 
    435         // If Imagick is used as our editor, provide some more information about its limitations.
    436         if ( 'WP_Image_Editor_Imagick' === _wp_image_editor_choose() && isset( $imagick ) && $imagick instanceof Imagick ) {
    437             $limits = array(
    438                 'area'   => ( defined( 'imagick::RESOURCETYPE_AREA' ) ? size_format( $imagick->getResourceLimit( imagick::RESOURCETYPE_AREA ) ) : $not_available ),
    439                 'disk'   => ( defined( 'imagick::RESOURCETYPE_DISK' ) ? $imagick->getResourceLimit( imagick::RESOURCETYPE_DISK ) : $not_available ),
    440                 'file'   => ( defined( 'imagick::RESOURCETYPE_FILE' ) ? $imagick->getResourceLimit( imagick::RESOURCETYPE_FILE ) : $not_available ),
    441                 'map'    => ( defined( 'imagick::RESOURCETYPE_MAP' ) ? size_format( $imagick->getResourceLimit( imagick::RESOURCETYPE_MAP ) ) : $not_available ),
    442                 'memory' => ( defined( 'imagick::RESOURCETYPE_MEMORY' ) ? size_format( $imagick->getResourceLimit( imagick::RESOURCETYPE_MEMORY ) ) : $not_available ),
    443                 'thread' => ( defined( 'imagick::RESOURCETYPE_THREAD' ) ? $imagick->getResourceLimit( imagick::RESOURCETYPE_THREAD ) : $not_available ),
    444                 'time'   => ( defined( 'imagick::RESOURCETYPE_TIME' ) ? $imagick->getResourceLimit( imagick::RESOURCETYPE_TIME ) : $not_available ),
    445             );
    446 
    447             $limits_debug = array(
    448                 'imagick::RESOURCETYPE_AREA'   => ( defined( 'imagick::RESOURCETYPE_AREA' ) ? size_format( $imagick->getResourceLimit( imagick::RESOURCETYPE_AREA ) ) : 'not available' ),
    449                 'imagick::RESOURCETYPE_DISK'   => ( defined( 'imagick::RESOURCETYPE_DISK' ) ? $imagick->getResourceLimit( imagick::RESOURCETYPE_DISK ) : 'not available' ),
    450                 'imagick::RESOURCETYPE_FILE'   => ( defined( 'imagick::RESOURCETYPE_FILE' ) ? $imagick->getResourceLimit( imagick::RESOURCETYPE_FILE ) : 'not available' ),
    451                 'imagick::RESOURCETYPE_MAP'    => ( defined( 'imagick::RESOURCETYPE_MAP' ) ? size_format( $imagick->getResourceLimit( imagick::RESOURCETYPE_MAP ) ) : 'not available' ),
    452                 'imagick::RESOURCETYPE_MEMORY' => ( defined( 'imagick::RESOURCETYPE_MEMORY' ) ? size_format( $imagick->getResourceLimit( imagick::RESOURCETYPE_MEMORY ) ) : 'not available' ),
    453                 'imagick::RESOURCETYPE_THREAD' => ( defined( 'imagick::RESOURCETYPE_THREAD' ) ? $imagick->getResourceLimit( imagick::RESOURCETYPE_THREAD ) : 'not available' ),
    454                 'imagick::RESOURCETYPE_TIME'   => ( defined( 'imagick::RESOURCETYPE_TIME' ) ? $imagick->getResourceLimit( imagick::RESOURCETYPE_TIME ) : 'not available' ),
    455             );
    456 
    457             $info['wp-media']['fields']['imagick_limits'] = array(
    458                 'label' => __( 'Imagick Resource Limits' ),
    459                 'value' => $limits,
    460                 'debug' => $limits_debug,
    461             );
    462 
    463             try {
    464                 $formats = Imagick::queryFormats( '*' );
    465             } catch ( Exception $e ) {
    466                 $formats = array();
    467             }
    468 
    469             $info['wp-media']['fields']['imagemagick_file_formats'] = array(
    470                 'label' => __( 'ImageMagick supported file formats' ),
    471                 'value' => ( empty( $formats ) ) ? __( 'Unable to determine' ) : implode( ', ', $formats ),
    472                 'debug' => ( empty( $formats ) ) ? 'Unable to determine' : implode( ', ', $formats ),
    473             );
    474         }
    475 
    476         // Get GD information, if available.
    477         if ( function_exists( 'gd_info' ) ) {
    478             $gd = gd_info();
    479         } else {
    480             $gd = false;
    481         }
    482 
    483         $info['wp-media']['fields']['gd_version'] = array(
    484             'label' => __( 'GD version' ),
    485             'value' => ( is_array( $gd ) ? $gd['GD Version'] : $not_available ),
    486             'debug' => ( is_array( $gd ) ? $gd['GD Version'] : 'not available' ),
    487         );
    488 
    489         $gd_image_formats     = array();
    490         $gd_supported_formats = array(
    491             'GIF Create' => 'GIF',
    492             'JPEG'       => 'JPEG',
    493             'PNG'        => 'PNG',
    494             'WebP'       => 'WebP',
    495             'BMP'        => 'BMP',
    496             'AVIF'       => 'AVIF',
    497             'HEIF'       => 'HEIF',
    498             'TIFF'       => 'TIFF',
    499             'XPM'        => 'XPM',
    500         );
    501 
    502         foreach ( $gd_supported_formats as $format_key => $format ) {
    503             $index = $format_key . ' Support';
    504             if ( isset( $gd[ $index ] ) && $gd[ $index ] ) {
    505                 array_push( $gd_image_formats, $format );
    506             }
    507         }
    508 
    509         if ( ! empty( $gd_image_formats ) ) {
    510             $info['wp-media']['fields']['gd_formats'] = array(
    511                 'label' => __( 'GD supported file formats' ),
    512                 'value' => implode( ', ', $gd_image_formats ),
    513             );
    514         }
    515 
    516         // Get Ghostscript information, if available.
    517         if ( function_exists( 'exec' ) ) {
    518             $gs = exec( 'gs --version' );
    519 
    520             if ( empty( $gs ) ) {
    521                 $gs       = $not_available;
    522                 $gs_debug = 'not available';
    523             } else {
    524                 $gs_debug = $gs;
    525             }
    526         } else {
    527             $gs       = __( 'Unable to determine if Ghostscript is installed' );
    528             $gs_debug = 'unknown';
    529         }
    530 
    531         $info['wp-media']['fields']['ghostscript_version'] = array(
    532             'label' => __( 'Ghostscript version' ),
    533             'value' => $gs,
    534             'debug' => $gs_debug,
    535         );
    536352
    537353        // List all available plugins.
     
    12181034
    12191035    /**
     1036     * Gets the WordPress media section of the debug data.
     1037     *
     1038     * @since 6.7.0
     1039     *
     1040     * @throws ImagickException
     1041     * @return array
     1042     */
     1043    public static function get_wp_media(): array {
     1044        // Spare few function calls.
     1045        $not_available = __( 'Not available' );
     1046
     1047        // Populate the media fields.
     1048        $fields['image_editor'] = array(
     1049            'label' => __( 'Active editor' ),
     1050            'value' => _wp_image_editor_choose(),
     1051        );
     1052
     1053        // Get ImageMagic information, if available.
     1054        if ( class_exists( 'Imagick' ) ) {
     1055            // Save the Imagick instance for later use.
     1056            $imagick             = new Imagick();
     1057            $imagemagick_version = $imagick->getVersion();
     1058        } else {
     1059            $imagemagick_version = __( 'Not available' );
     1060        }
     1061
     1062        $fields['imagick_module_version'] = array(
     1063            'label' => __( 'ImageMagick version number' ),
     1064            'value' => ( is_array( $imagemagick_version ) ? $imagemagick_version['versionNumber'] : $imagemagick_version ),
     1065        );
     1066
     1067        $fields['imagemagick_version'] = array(
     1068            'label' => __( 'ImageMagick version string' ),
     1069            'value' => ( is_array( $imagemagick_version ) ? $imagemagick_version['versionString'] : $imagemagick_version ),
     1070        );
     1071
     1072        $imagick_version = phpversion( 'imagick' );
     1073
     1074        $fields['imagick_version'] = array(
     1075            'label' => __( 'Imagick version' ),
     1076            'value' => ( $imagick_version ) ? $imagick_version : __( 'Not available' ),
     1077        );
     1078
     1079        if ( ! function_exists( 'ini_get' ) ) {
     1080            $fields['ini_get'] = array(
     1081                'label' => __( 'File upload settings' ),
     1082                'value' => sprintf(
     1083                /* translators: %s: ini_get() */
     1084                    __( 'Unable to determine some settings, as the %s function has been disabled.' ),
     1085                    'ini_get()'
     1086                ),
     1087                'debug' => 'ini_get() is disabled',
     1088            );
     1089        } else {
     1090            // Get the PHP ini directive values.
     1091            $file_uploads        = ini_get( 'file_uploads' );
     1092            $post_max_size       = ini_get( 'post_max_size' );
     1093            $upload_max_filesize = ini_get( 'upload_max_filesize' );
     1094            $max_file_uploads    = ini_get( 'max_file_uploads' );
     1095            $effective           = min( wp_convert_hr_to_bytes( $post_max_size ), wp_convert_hr_to_bytes( $upload_max_filesize ) );
     1096
     1097            // Add info in Media section.
     1098            $fields['file_uploads']        = array(
     1099                'label' => __( 'File uploads' ),
     1100                'value' => $file_uploads ? __( 'Enabled' ) : __( 'Disabled' ),
     1101                'debug' => $file_uploads,
     1102            );
     1103            $fields['post_max_size']       = array(
     1104                'label' => __( 'Max size of post data allowed' ),
     1105                'value' => $post_max_size,
     1106            );
     1107            $fields['upload_max_filesize'] = array(
     1108                'label' => __( 'Max size of an uploaded file' ),
     1109                'value' => $upload_max_filesize,
     1110            );
     1111            $fields['max_effective_size']  = array(
     1112                'label' => __( 'Max effective file size' ),
     1113                'value' => size_format( $effective ),
     1114            );
     1115            $fields['max_file_uploads']    = array(
     1116                'label' => __( 'Max simultaneous file uploads' ),
     1117                'value' => $max_file_uploads,
     1118            );
     1119        }
     1120
     1121        // If Imagick is used as our editor, provide some more information about its limitations.
     1122        if ( 'WP_Image_Editor_Imagick' === _wp_image_editor_choose() && isset( $imagick ) && $imagick instanceof Imagick ) {
     1123            $limits = array(
     1124                'area'   => ( defined( 'imagick::RESOURCETYPE_AREA' ) ? size_format( $imagick->getResourceLimit( imagick::RESOURCETYPE_AREA ) ) : $not_available ),
     1125                'disk'   => ( defined( 'imagick::RESOURCETYPE_DISK' ) ? $imagick->getResourceLimit( imagick::RESOURCETYPE_DISK ) : $not_available ),
     1126                'file'   => ( defined( 'imagick::RESOURCETYPE_FILE' ) ? $imagick->getResourceLimit( imagick::RESOURCETYPE_FILE ) : $not_available ),
     1127                'map'    => ( defined( 'imagick::RESOURCETYPE_MAP' ) ? size_format( $imagick->getResourceLimit( imagick::RESOURCETYPE_MAP ) ) : $not_available ),
     1128                'memory' => ( defined( 'imagick::RESOURCETYPE_MEMORY' ) ? size_format( $imagick->getResourceLimit( imagick::RESOURCETYPE_MEMORY ) ) : $not_available ),
     1129                'thread' => ( defined( 'imagick::RESOURCETYPE_THREAD' ) ? $imagick->getResourceLimit( imagick::RESOURCETYPE_THREAD ) : $not_available ),
     1130                'time'   => ( defined( 'imagick::RESOURCETYPE_TIME' ) ? $imagick->getResourceLimit( imagick::RESOURCETYPE_TIME ) : $not_available ),
     1131            );
     1132
     1133            $limits_debug = array(
     1134                'imagick::RESOURCETYPE_AREA'   => ( defined( 'imagick::RESOURCETYPE_AREA' ) ? size_format( $imagick->getResourceLimit( imagick::RESOURCETYPE_AREA ) ) : 'not available' ),
     1135                'imagick::RESOURCETYPE_DISK'   => ( defined( 'imagick::RESOURCETYPE_DISK' ) ? $imagick->getResourceLimit( imagick::RESOURCETYPE_DISK ) : 'not available' ),
     1136                'imagick::RESOURCETYPE_FILE'   => ( defined( 'imagick::RESOURCETYPE_FILE' ) ? $imagick->getResourceLimit( imagick::RESOURCETYPE_FILE ) : 'not available' ),
     1137                'imagick::RESOURCETYPE_MAP'    => ( defined( 'imagick::RESOURCETYPE_MAP' ) ? size_format( $imagick->getResourceLimit( imagick::RESOURCETYPE_MAP ) ) : 'not available' ),
     1138                'imagick::RESOURCETYPE_MEMORY' => ( defined( 'imagick::RESOURCETYPE_MEMORY' ) ? size_format( $imagick->getResourceLimit( imagick::RESOURCETYPE_MEMORY ) ) : 'not available' ),
     1139                'imagick::RESOURCETYPE_THREAD' => ( defined( 'imagick::RESOURCETYPE_THREAD' ) ? $imagick->getResourceLimit( imagick::RESOURCETYPE_THREAD ) : 'not available' ),
     1140                'imagick::RESOURCETYPE_TIME'   => ( defined( 'imagick::RESOURCETYPE_TIME' ) ? $imagick->getResourceLimit( imagick::RESOURCETYPE_TIME ) : 'not available' ),
     1141            );
     1142
     1143            $fields['imagick_limits'] = array(
     1144                'label' => __( 'Imagick Resource Limits' ),
     1145                'value' => $limits,
     1146                'debug' => $limits_debug,
     1147            );
     1148
     1149            try {
     1150                $formats = Imagick::queryFormats( '*' );
     1151            } catch ( Exception $e ) {
     1152                $formats = array();
     1153            }
     1154
     1155            $fields['imagemagick_file_formats'] = array(
     1156                'label' => __( 'ImageMagick supported file formats' ),
     1157                'value' => ( empty( $formats ) ) ? __( 'Unable to determine' ) : implode( ', ', $formats ),
     1158                'debug' => ( empty( $formats ) ) ? 'Unable to determine' : implode( ', ', $formats ),
     1159            );
     1160        }
     1161
     1162        // Get GD information, if available.
     1163        if ( function_exists( 'gd_info' ) ) {
     1164            $gd = gd_info();
     1165        } else {
     1166            $gd = false;
     1167        }
     1168
     1169        $fields['gd_version'] = array(
     1170            'label' => __( 'GD version' ),
     1171            'value' => ( is_array( $gd ) ? $gd['GD Version'] : $not_available ),
     1172            'debug' => ( is_array( $gd ) ? $gd['GD Version'] : 'not available' ),
     1173        );
     1174
     1175        $gd_image_formats     = array();
     1176        $gd_supported_formats = array(
     1177            'GIF Create' => 'GIF',
     1178            'JPEG'       => 'JPEG',
     1179            'PNG'        => 'PNG',
     1180            'WebP'       => 'WebP',
     1181            'BMP'        => 'BMP',
     1182            'AVIF'       => 'AVIF',
     1183            'HEIF'       => 'HEIF',
     1184            'TIFF'       => 'TIFF',
     1185            'XPM'        => 'XPM',
     1186        );
     1187
     1188        foreach ( $gd_supported_formats as $format_key => $format ) {
     1189            $index = $format_key . ' Support';
     1190            if ( isset( $gd[ $index ] ) && $gd[ $index ] ) {
     1191                array_push( $gd_image_formats, $format );
     1192            }
     1193        }
     1194
     1195        if ( ! empty( $gd_image_formats ) ) {
     1196            $fields['gd_formats'] = array(
     1197                'label' => __( 'GD supported file formats' ),
     1198                'value' => implode( ', ', $gd_image_formats ),
     1199            );
     1200        }
     1201
     1202        // Get Ghostscript information, if available.
     1203        if ( function_exists( 'exec' ) ) {
     1204            $gs = exec( 'gs --version' );
     1205
     1206            if ( empty( $gs ) ) {
     1207                $gs       = $not_available;
     1208                $gs_debug = 'not available';
     1209            } else {
     1210                $gs_debug = $gs;
     1211            }
     1212        } else {
     1213            $gs       = __( 'Unable to determine if Ghostscript is installed' );
     1214            $gs_debug = 'unknown';
     1215        }
     1216
     1217        $fields['ghostscript_version'] = array(
     1218            'label' => __( 'Ghostscript version' ),
     1219            'value' => $gs,
     1220            'debug' => $gs_debug,
     1221        );
     1222
     1223        return array(
     1224            'label'  => __( 'Media Handling' ),
     1225            'fields' => $fields,
     1226        );
     1227    }
     1228
     1229
     1230    /**
    12201231     * Gets the WordPress plugins section of the debug data.
    12211232     *
Note: See TracChangeset for help on using the changeset viewer.