Ticket #22356: 22356.4.diff

File 22356.4.diff, 10.7 KB (added by scribu, 6 months ago)

Separate $path parameter; test() -> exists()

  • wp-admin/includes/media.php

    diff --git wp-admin/includes/media.php wp-admin/includes/media.php
    index 6cc1b63..185b096 100644
    function get_media_item( $attachment_id, $args = null ) { 
    11221122        $media_dims = apply_filters( 'media_meta', $media_dims, $post ); 
    11231123 
    11241124        $image_edit_button = ''; 
    1125         if ( gd_edit_image_support( $post->post_mime_type ) ) { 
     1125        if ( WP_Image_Editor::supports( array( 'mime_type' => $post->post_mime_type ) ) ) { 
    11261126                $nonce = wp_create_nonce( "image_editor-$post->ID" ); 
    11271127                $image_edit_button = "<input type='button' id='imgedit-open-btn-$post->ID' onclick='imageEdit.open( $post->ID, \"$nonce\" )' class='button' value='" . esc_attr__( 'Edit Image' ) . "' /> <span class='spinner'></span>"; 
    11281128        } 
    function edit_form_image_editor() { 
    22542254        $att_url = wp_get_attachment_url( $post->ID ); 
    22552255 
    22562256        $image_edit_button = ''; 
    2257         if ( gd_edit_image_support( $post->post_mime_type ) ) { 
     2257        if ( WP_Image_Editor::supports( array( 'mime_type' => $post->post_mime_type ) ) ) { 
    22582258                $nonce = wp_create_nonce( "image_editor-$post->ID" ); 
    22592259                $image_edit_button = "<input type='button' id='imgedit-open-btn-$post->ID' onclick='imageEdit.open( $post->ID, \"$nonce\" )' class='button' value='" . esc_attr__( 'Edit Image' ) . "' /> <span class='spinner'></span>"; 
    22602260        } 
  • wp-includes/class-wp-image-editor-gd.php

    diff --git wp-includes/class-wp-image-editor-gd.php wp-includes/class-wp-image-editor-gd.php
    index ca76006..28716f3 100644
    class WP_Image_Editor_GD extends WP_Image_Editor { 
    3232         * 
    3333         * @return boolean 
    3434         */ 
    35         public static function test( $args = null ) { 
     35        public static function exists() { 
    3636                if ( ! extension_loaded('gd') || ! function_exists('gd_info') ) 
    3737                        return false; 
    3838 
    class WP_Image_Editor_GD extends WP_Image_Editor { 
    100100         * @return boolean 
    101101         */ 
    102102        public static function supports_mime_type( $mime_type ) { 
    103                 $allowed_mime_types = array( 'image/gif', 'image/png', 'image/jpeg' ); 
     103                $image_types = imagetypes(); 
     104                switch( $mime_type ) { 
     105                        case 'image/jpeg': 
     106                                return ($image_types & IMG_JPG) != 0; 
     107                        case 'image/png': 
     108                                return ($image_types & IMG_PNG) != 0; 
     109                        case 'image/gif': 
     110                                return ($image_types & IMG_GIF) != 0; 
     111                } 
    104112 
    105                 return in_array( $mime_type, $allowed_mime_types ); 
     113                return false; 
    106114        } 
    107115 
    108116        /** 
    class WP_Image_Editor_GD extends WP_Image_Editor { 
    261269         * @since 3.5.0 
    262270         * @access public 
    263271         * 
    264          * @param boolean $horz Horizonal Flip 
     272         * @param boolean $horz Horizontal Flip 
    265273         * @param boolean $vert Vertical Flip 
    266274         * @returns boolean|WP_Error 
    267275         */ 
    class WP_Image_Editor_GD extends WP_Image_Editor { 
    369377                                return imagejpeg( $this->image, null, $this->quality ); 
    370378                } 
    371379        } 
    372 } 
    373  No newline at end of file 
     380} 
  • wp-includes/class-wp-image-editor-imagick.php

    diff --git wp-includes/class-wp-image-editor-imagick.php wp-includes/class-wp-image-editor-imagick.php
    index 601b99b..b104941 100644
    class WP_Image_Editor_Imagick extends WP_Image_Editor { 
    3636         * 
    3737         * @return boolean 
    3838         */ 
    39         public static function test( $args = null ) { 
     39        public static function exists() { 
    4040                if ( ! extension_loaded( 'imagick' ) || ! is_callable( 'Imagick', 'queryFormats' ) ) 
    4141                        return false; 
    4242 
    class WP_Image_Editor_Imagick extends WP_Image_Editor { 
    147147         * @return boolean 
    148148         */ 
    149149        public static function supports_mime_type( $mime_type ) { 
    150                 if ( ! $mime_type ) 
    151                         return false; 
    152  
    153150                $imagick_extension = strtoupper( self::get_extension( $mime_type ) ); 
    154151 
     152                if ( ! $imagick_extension ) 
     153                        return false; 
     154 
    155155                try { 
    156156                        return ( (bool) Imagick::queryFormats( $imagick_extension ) ); 
    157157                } 
    class WP_Image_Editor_Imagick extends WP_Image_Editor { 
    312312         * @since 3.5.0 
    313313         * @access public 
    314314         * 
    315          * @param boolean $horz Horizonal Flip 
     315         * @param boolean $horz Horizontal Flip 
    316316         * @param boolean $vert Vertical Flip 
    317317         * @returns boolean|WP_Error 
    318318         */ 
  • wp-includes/class-wp-image-editor.php

    diff --git wp-includes/class-wp-image-editor.php wp-includes/class-wp-image-editor.php
    index 920e4a4..5fc2511 100644
    abstract class WP_Image_Editor { 
    2828         * @since 3.5.0 
    2929         * @access public 
    3030         * 
    31          * @param string $path Path to File to Load 
    32          * @param array $required_methods Methods to require in implementation 
     31         * @param string $path Path to file to load 
     32         * @param array $args Additional data. Accepts { 'mime_type'=>string, 'methods'=>{string, string, ...} } 
    3333         * @return WP_Image_Editor|WP_Error 
    3434         */ 
    35         public final static function get_instance( $path = null, $required_methods = null ) { 
    36                 $implementation = apply_filters( 'wp_image_editor_class', self::choose_implementation( $required_methods ), $path ); 
     35        public final static function get_instance( $path, $args = array() ) { 
     36                if ( ! isset( $args['mime_type'] ) ) { 
     37                        $file_info  = wp_check_filetype( $path ); 
     38 
     39                        // If $file_info['type'] is false, then we let the editor attempt to 
     40                        // figure out the file type, rather than forcing a failure based on extension. 
     41                        if ( isset( $file_info ) && $file_info['type'] ) 
     42                                $args['mime_type'] = $file_info['type']; 
     43                } 
     44 
     45                $implementation = apply_filters( 'wp_image_editor_class', self::choose_implementation( $args ) ); 
    3746 
    3847                if ( $implementation ) { 
    3948                        $editor = new $implementation( $path ); 
    abstract class WP_Image_Editor { 
    4554                        return $editor; 
    4655                } 
    4756 
    48                 return new WP_Error( 'no_editor', __('No editor could be selected') ); 
     57                return new WP_Error( 'image_no_editor', __('No editor could be selected.') ); 
    4958        } 
    5059 
    5160        /** 
    abstract class WP_Image_Editor { 
    5463         * @since 3.5.0 
    5564         * @access private 
    5665         * 
    57          * @param array $required_methods String array of all methods required for implementation returned. 
     66         * @param array $args Additional data. Accepts { 'mime_type'=>string, 'methods'=>{string, string, ...} } 
    5867         * @return string|bool Class name for the first editor that claims to support the request. False if no editor claims to support the request. 
    5968         */ 
    60         private final static function choose_implementation( $required_methods = null ) { 
    61                 $request_order = apply_filters( 'wp_image_editors', 
     69        private final static function choose_implementation( $path, $args = array() ) { 
     70                $implementations = apply_filters( 'wp_image_editors', 
    6271                        array( 'WP_Image_Editor_Imagick', 'WP_Image_Editor_GD' ) ); 
    6372 
    64                 if ( ! $required_methods ) 
    65                         $required_methods = array(); 
     73                foreach ( $implementations as $implementation ) { 
     74                        if ( ! call_user_func( array( $implementation, 'exists' ), $args ) ) 
     75                                continue; 
    6676 
    67                 // Loop over each editor on each request looking for one which will serve this request's needs 
    68                 foreach ( $request_order as $editor ) { 
    69                         // Check to see if this editor is a possibility, calls the editor statically 
    70                         if ( ! call_user_func( array( $editor, 'test' ) ) ) 
     77                        if ( isset( $args['mime_type'] ) && 
     78                                ! call_user_func( 
     79                                        array( $implementation, 'supports_mime_type' ), 
     80                                        $args['mime_type'] ) ) { 
    7181                                continue; 
     82                        } 
    7283 
    73                         // Make sure that all methods are supported by editor. 
    74                         if ( array_diff( $required_methods, get_class_methods( $editor ) ) ) 
     84                        if ( isset( $args['methods'] ) && 
     85                                 array_diff( $args['methods'], get_class_methods( $implementation ) ) ) { 
    7586                                continue; 
     87                        } 
    7688 
    77                         return $editor; 
     89                        return $implementation; 
    7890                } 
     91 
    7992                return false; 
    8093        } 
    8194 
    8295        /** 
     96         * Tests whether there is an editor that supports a given mime type or methods. 
     97         * 
     98         * @since 3.5.0 
     99         * @access public 
     100         * 
     101         * @param string|array $args String path to image to check for support, or array of arguments.  Accepts { 'path'=>string, 'mime_type'=>string, 'methods'=>{string, string, ...} } 
     102         * @return boolean true if an eligible editor is found; false otherwise 
     103         */ 
     104        public final static function supports( $args = array() ) { 
     105                return (bool) self::choose_implementation( $args ); 
     106        } 
     107 
     108        /** 
    83109         * Loads image from $this->file into editor. 
    84110         * 
    85111         * @since 3.5.0 
    abstract class WP_Image_Editor { 
    168194         * @access public 
    169195         * @abstract 
    170196         * 
    171          * @param boolean $horz Horizonal Flip 
     197         * @param boolean $horz Horizontal Flip 
    172198         * @param boolean $vert Vertical Flip 
    173199         * @return boolean|WP_Error 
    174200         */ 
    abstract class WP_Image_Editor { 
    197223         * @param array $args 
    198224         * @return boolean 
    199225         */ 
    200         public static function test( $args = null ) { 
     226        public static function exists() { 
    201227                return false; 
    202228        } 
    203229 
  • wp-includes/deprecated.php

    diff --git wp-includes/deprecated.php wp-includes/deprecated.php
    index 9e99614..5b841df 100644
    function user_pass_ok($user_login, $user_pass) { 
    33283328 * @since 2.3.0 
    33293329 * @deprecated 3.5.0 
    33303330 */ 
    3331 function _save_post_hook() {} 
    3332  No newline at end of file 
     3331function _save_post_hook() {} 
     3332 
     3333/** 
     3334 * Check if the installed version of GD supports particular image type 
     3335 * 
     3336 * @since 2.9.0 
     3337 * @deprecated 3.5.0 
     3338 * @see WP_Image_Editor::supports() 
     3339 * 
     3340 * @param string $mime_type 
     3341 * @return bool 
     3342 */ 
     3343function gd_edit_image_support($mime_type) { 
     3344        _deprecated_function( __FUNCTION__, '3.5', 'WP_Image_Editor::supports()' ); 
     3345        if ( function_exists('imagetypes') ) { 
     3346                switch( $mime_type ) { 
     3347                        case 'image/jpeg': 
     3348                                return (imagetypes() & IMG_JPG) != 0; 
     3349                        case 'image/png': 
     3350                                return (imagetypes() & IMG_PNG) != 0; 
     3351                        case 'image/gif': 
     3352                                return (imagetypes() & IMG_GIF) != 0; 
     3353                } 
     3354        } else { 
     3355                switch( $mime_type ) { 
     3356                        case 'image/jpeg': 
     3357                                return function_exists('imagecreatefromjpeg'); 
     3358                        case 'image/png': 
     3359                                return function_exists('imagecreatefrompng'); 
     3360                        case 'image/gif': 
     3361                                return function_exists('imagecreatefromgif'); 
     3362                } 
     3363        } 
     3364        return false; 
     3365} 
     3366 No newline at end of file 
  • wp-includes/media.php

    diff --git wp-includes/media.php wp-includes/media.php
    index d8475f1..cfc7172 100644
    function get_taxonomies_for_attachments( $output = 'names' ) { 
    904904} 
    905905 
    906906/** 
    907  * Check if the installed version of GD supports particular image type 
    908  * 
    909  * @since 2.9.0 
    910  * 
    911  * @param string $mime_type 
    912  * @return bool 
    913  */ 
    914 function gd_edit_image_support($mime_type) { 
    915         if ( function_exists('imagetypes') ) { 
    916                 switch( $mime_type ) { 
    917                         case 'image/jpeg': 
    918                                 return (imagetypes() & IMG_JPG) != 0; 
    919                         case 'image/png': 
    920                                 return (imagetypes() & IMG_PNG) != 0; 
    921                         case 'image/gif': 
    922                                 return (imagetypes() & IMG_GIF) != 0; 
    923                 } 
    924         } else { 
    925                 switch( $mime_type ) { 
    926                         case 'image/jpeg': 
    927                                 return function_exists('imagecreatefromjpeg'); 
    928                         case 'image/png': 
    929                                 return function_exists('imagecreatefrompng'); 
    930                         case 'image/gif': 
    931                                 return function_exists('imagecreatefromgif'); 
    932                 } 
    933         } 
    934         return false; 
    935 } 
    936  
    937 /** 
    938907 * Create new GD image resource with transparency support 
    939908 * @TODO: Deprecate if possible. 
    940909 *