Make WordPress Core

Ticket #43658: 43658.3.diff

File 43658.3.diff, 16.1 KB (added by adamsilverstein, 6 years ago)
  • src/wp-includes/media.php

    diff --git src/wp-includes/media.php src/wp-includes/media.php
    index ace9021fd7..38f69b0c41 100644
    function image_constrain_size_for_editor( $width, $height, $size = 'medium', $co 
    6666        if ( is_array( $size ) ) {
    6767                $max_width  = $size[0];
    6868                $max_height = $size[1];
    69         } elseif ( $size == 'thumb' || $size == 'thumbnail' ) {
     69        } elseif ( 'thumb' == $size || 'thumbnail' == $size ) {
    7070                $max_width  = intval( get_option( 'thumbnail_size_w' ) );
    7171                $max_height = intval( get_option( 'thumbnail_size_h' ) );
    7272                // last chance thumbnail size defaults
    function image_constrain_size_for_editor( $width, $height, $size = 'medium', $co 
    7474                        $max_width  = 128;
    7575                        $max_height = 96;
    7676                }
    77         } elseif ( $size == 'medium' ) {
     77        } elseif ( 'medium' == $size ) {
    7878                $max_width  = intval( get_option( 'medium_size_w' ) );
    7979                $max_height = intval( get_option( 'medium_size_h' ) );
    8080
    81         } elseif ( $size == 'medium_large' ) {
     81        } elseif ( 'medium_large' == $size ) {
    8282                $max_width  = intval( get_option( 'medium_large_size_w' ) );
    8383                $max_height = intval( get_option( 'medium_large_size_h' ) );
    8484
    8585                if ( intval( $content_width ) > 0 ) {
    8686                        $max_width = min( intval( $content_width ), $max_width );
    8787                }
    88         } elseif ( $size == 'large' ) {
     88        } elseif ( 'large' == $size ) {
    8989                /*
    9090                 * We're inserting a large size image into the editor. If it's a really
    9191                 * big image we'll scale it down to fit reasonably within the editor
    function image_downsize( $id, $size = 'medium' ) { 
    195195         * @param array|string $size     Size of image. Image size or array of width and height values (in that order).
    196196         *                               Default 'medium'.
    197197         */
    198         if ( $out = apply_filters( 'image_downsize', false, $id, $size ) ) {
     198        $out = apply_filters( 'image_downsize', false, $id, $size );
     199        if ( $out ) {
    199200                return $out;
    200201        }
    201202
    202203        $img_url          = wp_get_attachment_url( $id );
    203204        $meta             = wp_get_attachment_metadata( $id );
    204         $width            = $height = 0;
     205        $height           = 0;
     206        $width            = $height;
    205207        $is_intermediate  = false;
    206208        $img_url_basename = wp_basename( $img_url );
     209        $intermediate     = image_get_intermediate_size( $id, $size );
     210        $thumb_file       = wp_get_attachment_thumb_file( $id );
     211        $info             = $thumb_file && getimagesize( $thumb_file );
    207212
    208213        // If the file isn't an image, attempt to replace its URL with a rendered image from its meta.
    209214        // Otherwise, a non-image type could be returned.
    function image_downsize( $id, $size = 'medium' ) { 
    219224        }
    220225
    221226        // try for a new style intermediate size
    222         if ( $intermediate = image_get_intermediate_size( $id, $size ) ) {
     227        if ( $intermediate ) {
    223228                $img_url         = str_replace( $img_url_basename, $intermediate['file'], $img_url );
    224229                $width           = $intermediate['width'];
    225230                $height          = $intermediate['height'];
    226231                $is_intermediate = true;
    227         } elseif ( $size == 'thumbnail' ) {
     232        } elseif ( 'thumbnail' == $size ) {
    228233                // fall back to the old thumbnail
    229                 if ( ( $thumb_file = wp_get_attachment_thumb_file( $id ) ) && $info = getimagesize( $thumb_file ) ) {
     234                if ( $thumb_file && $info ) {
    230235                        $img_url         = str_replace( $img_url_basename, wp_basename( $thumb_file ), $img_url );
    231236                        $width           = $info[0];
    232237                        $height          = $info[1];
    function wp_constrain_dimensions( $current_width, $current_height, $max_width = 
    412417                return array( $current_width, $current_height );
    413418        }
    414419
    415         $width_ratio = $height_ratio = 1.0;
    416         $did_width   = $did_height = false;
     420        $height_ratio = 1.0;
     421        $width_ratio  = $height_ratio;
     422        $did_height   = false;
     423        $did_width    = $did_height;
    417424
    418425        if ( $max_width > 0 && $current_width > 0 && $current_width > $max_width ) {
    419426                $width_ratio = $max_width / $current_width;
    function wp_image_matches_ratio( $source_width, $source_height, $target_width, $ 
    687694 * }
    688695 */
    689696function image_get_intermediate_size( $post_id, $size = 'thumbnail' ) {
    690         if ( ! $size || ! is_array( $imagedata = wp_get_attachment_metadata( $post_id ) ) || empty( $imagedata['sizes'] ) ) {
     697        $imagedata = wp_get_attachment_metadata( $post_id );
     698        if ( ! $size || ! is_array( $imagedata ) || empty( $imagedata['sizes'] ) ) {
    691699                return false;
    692700        }
    693701
    function wp_get_attachment_image_src( $attachment_id, $size = 'thumbnail', $icon 
    826834        if ( ! $image ) {
    827835                $src = false;
    828836
    829                 if ( $icon && $src = wp_mime_type_icon( $attachment_id ) ) {
     837                if ( $icon && wp_mime_type_icon( $attachment_id ) ) {
     838                        $src = wp_mime_type_icon( $attachment_id );
    830839                        /** This filter is documented in wp-includes/post.php */
    831840                        $icon_dir = apply_filters( 'icon_dir', ABSPATH . WPINC . '/images/media' );
    832841
    function _wp_get_attachment_relative_path( $file ) { 
    984993 *                    or false if the size doesn't exist.
    985994 */
    986995function _wp_get_image_size_from_meta( $size_name, $image_meta ) {
    987         if ( $size_name === 'full' ) {
     996        if ( 'full' == $size_name ) {
    988997                return array(
    989998                        absint( $image_meta['width'] ),
    990999                        absint( $image_meta['height'] ),
    function _wp_get_image_size_from_meta( $size_name, $image_meta ) { 
    10141023 * @return string|bool A 'srcset' value string or false.
    10151024 */
    10161025function wp_get_attachment_image_srcset( $attachment_id, $size = 'medium', $image_meta = null ) {
    1017         if ( ! $image = wp_get_attachment_image_src( $attachment_id, $size ) ) {
     1026        $image = wp_get_attachment_image_src( $attachment_id, $size );
     1027        if ( ! $image ) {
    10181028                return false;
    10191029        }
    10201030
    function wp_calculate_image_srcset( $size_array, $image_src, $image_meta, $attac 
    11461156
    11471157                // If the file name is part of the `src`, we've confirmed a match.
    11481158                if ( ! $src_matched && false !== strpos( $image_src, $dirname . $image['file'] ) ) {
    1149                         $src_matched = $is_src = true;
     1159                        $is_src      = true;
     1160                        $src_matched = $is_src;
    11501161                }
    11511162
    11521163                // Filter out images that are from previous edits.
    function wp_calculate_image_srcset( $size_array, $image_src, $image_meta, $attac 
    12321243 * @return string|bool A valid source size value for use in a 'sizes' attribute or false.
    12331244 */
    12341245function wp_get_attachment_image_sizes( $attachment_id, $size = 'medium', $image_meta = null ) {
    1235         if ( ! $image = wp_get_attachment_image_src( $attachment_id, $size ) ) {
     1246        $image = wp_get_attachment_image_src( $attachment_id, $size );
     1247        if ( ! $image ) {
    12361248                return false;
    12371249        }
    12381250
    function wp_make_content_images_responsive( $content ) { 
    13181330                return $content;
    13191331        }
    13201332
    1321         $selected_images = $attachment_ids = array();
     1333        $attachment_ids  = array();
     1334        $selected_images = $attachment_ids;
    13221335
    13231336        foreach ( $matches[0] as $image ) {
    1324                 if ( false === strpos( $image, ' srcset=' ) && preg_match( '/wp-image-([0-9]+)/i', $image, $class_id ) &&
    1325                         ( $attachment_id = absint( $class_id[1] ) ) ) {
    1326 
    1327                         /*
    1328                          * If exactly the same image tag is used more than once, overwrite it.
    1329                          * All identical tags will be replaced later with 'str_replace()'.
    1330                          */
    1331                         $selected_images[ $image ] = $attachment_id;
    1332                         // Overwrite the ID when the same image is included more than once.
    1333                         $attachment_ids[ $attachment_id ] = true;
     1337                if ( false === strpos( $image, ' srcset=' ) && preg_match( '/wp-image-([0-9]+)/i', $image, $class_id ) ) {
     1338                        $attachment_id = absint( $class_id[1] );
     1339                        if ( $attachment_id ) {
     1340
     1341                                /*
     1342                                 * If exactly the same image tag is used more than once, overwrite it.
     1343                                 * All identical tags will be replaced later with 'str_replace()'.
     1344                                 */
     1345                                $selected_images[ $image ] = $attachment_id;
     1346                                // Overwrite the ID when the same image is included more than once.
     1347                                $attachment_ids[ $attachment_id ] = true;
     1348                        }
    13341349                }
    13351350        }
    13361351
    function wp_image_add_srcset_and_sizes( $image, $image_meta, $attachment_id ) { 
    13941409                 */
    13951410                $image_filename = wp_basename( $image_src );
    13961411
    1397                 if ( $image_filename === wp_basename( $image_meta['file'] ) ) {
     1412                if ( wp_basename( $image_meta['file'] ) === $image_filename ) {
    13981413                        $width  = (int) $image_meta['width'];
    13991414                        $height = (int) $image_meta['height'];
    14001415                } else {
    function img_caption_shortcode( $attr, $content = null ) { 
    15391554         * @param string $content The image element, possibly wrapped in a hyperlink.
    15401555         */
    15411556        $output = apply_filters( 'img_caption_shortcode', '', $attr, $content );
    1542         if ( $output != '' ) {
     1557        if ( '' != $output ) {
    15431558                return $output;
    15441559        }
    15451560
    function img_caption_shortcode( $attr, $content = null ) { 
    15611576                return $content;
    15621577        }
    15631578
    1564         $id = $caption_id = $describedby = '';
     1579        $describedby = '';
     1580        $caption_id  = $describedby
     1581        $id          = $caption_id;
    15651582
    15661583        if ( $atts['id'] ) {
    15671584                $atts['id'] = sanitize_html_class( $atts['id'] );
    function gallery_shortcode( $attr ) { 
    17051722         * @param int    $instance Unique numeric ID of this gallery shortcode instance.
    17061723         */
    17071724        $output = apply_filters( 'post_gallery', '', $attr, $instance );
    1708         if ( $output != '' ) {
     1725        if ( '' != $output ) {
    17091726                return $output;
    17101727        }
    17111728
    function gallery_shortcode( $attr ) { 
    18781895                                </{$captiontag}>";
    18791896                }
    18801897                $output .= "</{$itemtag}>";
    1881                 if ( ! $html5 && $columns > 0 && ++$i % $columns == 0 ) {
     1898                if ( ! $html5 && $columns > 0 && 0 == ++$i % $columns ) {
    18821899                        $output .= '<br style="clear: both" />';
    18831900                }
    18841901        }
    18851902
    1886         if ( ! $html5 && $columns > 0 && $i % $columns !== 0 ) {
     1903        if ( ! $html5 && $columns > 0 && $i % 0 !== $columns ) {
    18871904                $output .= "
    18881905                        <br style='clear: both' />";
    18891906        }
    function wp_playlist_shortcode( $attr ) { 
    20252042         * @param int    $instance Unique numeric ID of this playlist shortcode instance.
    20262043         */
    20272044        $output = apply_filters( 'post_playlist', '', $attr, $instance );
    2028         if ( $output != '' ) {
     2045        if ( '' != $output ) {
    20292046                return $output;
    20302047        }
    20312048
    function wp_playlist_shortcode( $attr ) { 
    20492066
    20502067        $id = intval( $atts['id'] );
    20512068
    2052         if ( $atts['type'] !== 'audio' ) {
     2069        if ( 'audio' !== $atts['type'] ) {
    20532070                $atts['type'] = 'video';
    20542071        }
    20552072
    function wp_video_shortcode( $attr, $content = '' ) { 
    25822599                }
    25832600        }
    25842601
    2585         $is_vimeo      = $is_youtube = false;
     2602        $is_youtube    = false;
     2603        $is_vimeo      = $is_youtube
    25862604        $yt_pattern    = '#^https?://(?:www\.)?(?:youtube\.com/watch|youtu\.be/)#';
    25872605        $vimeo_pattern = '#^https?://(.+\.)?vimeo\.com/.*#';
    25882606
    function get_attachment_taxonomies( $attachment, $output = 'names' ) { 
    28912909
    28922910        $taxonomies = array();
    28932911        foreach ( $objects as $object ) {
    2894                 if ( $taxes = get_object_taxonomies( $object, $output ) ) {
     2912                $taxes = get_object_taxonomies( $object, $output );
     2913                if ( $taxes ) {
    28952914                        $taxonomies = array_merge( $taxonomies, $taxes );
    28962915                }
    28972916        }
    function wp_plupload_default_settings() { 
    31933212 * @return array|void Array of attachment details.
    31943213 */
    31953214function wp_prepare_attachment_for_js( $attachment ) {
    3196         if ( ! $attachment = get_post( $attachment ) ) {
     3215        $attachment = get_post( $attachment );
     3216        if ( ! $attachment ) {
    31973217                return;
    31983218        }
    31993219
    function wp_prepare_attachment_for_js( $attachment ) { 
    33163336                foreach ( $possible_sizes as $size => $label ) {
    33173337
    33183338                        /** This filter is documented in wp-includes/media.php */
    3319                         if ( $downsize = apply_filters( 'image_downsize', false, $attachment->ID, $size ) ) {
     3339                        $downsize = apply_filters( 'image_downsize', false, $attachment->ID, $size )
     3340                        if ( $downsize ) {
    33203341                                if ( empty( $downsize[3] ) ) {
    33213342                                        continue;
    33223343                                }
    function wp_enqueue_media( $args = array() ) { 
    35763597                $month_year->text = sprintf( __( '%1$s %2$d' ), $wp_locale->get_month( $month_year->month ), $month_year->year );
    35773598        }
    35783599
     3600        // Filter to show only available mime types.
     3601        $avail_post_mime_types = get_available_post_mime_types( 'attachment' );
     3602        $mime_types            = wp_list_pluck( get_post_mime_types(), 0 );
     3603        foreach ( $mime_types as $mime_type => $label ) {
     3604                if ( ! wp_match_mime_types( $mime_type, $avail_post_mime_types ) ) {
     3605                        unset( $mime_types[ $mime_type ] );
     3606                }
     3607        }
    35793608        $settings = array(
    35803609                'tabs'             => $tabs,
    35813610                'tabUrl'           => add_query_arg( array( 'chromeless' => true ), admin_url( 'media-upload.php' ) ),
    3582                 'mimeTypes'        => wp_list_pluck( get_post_mime_types(), 0 ),
     3611                'mimeTypes'        => $mime_types,
    35833612                /** This filter is documented in wp-admin/includes/media.php */
    35843613                'captions'         => ! apply_filters( 'disable_captions', '' ),
    35853614                'nonce'            => array(
    function wp_enqueue_media( $args = array() ) { 
    38153844 * @return array Found attachments.
    38163845 */
    38173846function get_attached_media( $type, $post = 0 ) {
    3818         if ( ! $post = get_post( $post ) ) {
     3847        $post = get_post( $post );
     3848        if ( ! $post ) {
    38193849                return array();
    38203850        }
    38213851
    function get_media_embedded_in_content( $content, $types = null ) { 
    39053935 *               from the expanded shortcode.
    39063936 */
    39073937function get_post_galleries( $post, $html = true ) {
    3908         if ( ! $post = get_post( $post ) ) {
     3938        $post = get_post( $post );
     3939        if ( ! $post ) {
    39093940                return array();
    39103941        }
    39113942
    function get_post_gallery_images( $post = 0 ) { 
    40264057 * @param WP_Post $attachment Attachment object.
    40274058 */
    40284059function wp_maybe_generate_attachment_metadata( $attachment ) {
    4029         if ( empty( $attachment ) || ( empty( $attachment->ID ) || ! $attachment_id = (int) $attachment->ID ) ) {
     4060        if ( empty( $attachment ) || ( empty( $attachment->ID ) || ! (int) $attachment->ID ) ) {
    40304061                return;
    40314062        }
    4032 
    4033         $file = get_attached_file( $attachment_id );
    4034         $meta = wp_get_attachment_metadata( $attachment_id );
     4063        $attachment_id = (int) $attachment->ID;
     4064        $file          = get_attached_file( $attachment_id );
     4065        $meta          = wp_get_attachment_metadata( $attachment_id );
    40354066        if ( empty( $meta ) && file_exists( $file ) ) {
    40364067                $_meta             = get_post_meta( $attachment_id );
    40374068                $regeneration_lock = 'wp_generating_att_' . $attachment_id;
    function attachment_url_to_postid( $url ) { 
    40714102                $path = substr( $path, strlen( $dir['baseurl'] . '/' ) );
    40724103        }
    40734104
    4074         $sql     = $wpdb->prepare(
    4075                 "SELECT post_id FROM $wpdb->postmeta WHERE meta_key = '_wp_attached_file' AND meta_value = %s",
    4076                 $path
     4105        $post_id = $wpdb->get_var(
     4106                $wpdb->prepare(
     4107                        "SELECT post_id FROM $wpdb->postmeta WHERE meta_key = '_wp_attached_file' AND meta_value = %s",
     4108                        $path
     4109                )
    40774110        );
    4078         $post_id = $wpdb->get_var( $sql );
    40794111
    40804112        /**
    40814113         * Filters an attachment id found by URL.
  • tests/phpunit/tests/functions.php

    diff --git tests/phpunit/tests/functions.php tests/phpunit/tests/functions.php
    index 88b9a46475..94a1c48c69 100644
    class Tests_Functions extends WP_UnitTestCase { 
    465465                $this->assertNotEmpty( $mimes );
    466466        }
    467467
     468        function check_settings_for_single( $settings ) {
     469                $this->assertEquals( array( 'image' ), array_keys( $settings['mimeTypes'] ) );
     470                return $settings;
     471        }
     472
     473        function check_settings_for_multiple( $settings ) {
     474                $this->assertEquals( array( 'image', 'audio' ), array_keys( $settings['mimeTypes'] ) );
     475                return $settings;
     476        }
     477
     478        /**
     479         * Test that the media grid uses the correct available single media type.
     480         * @ticket 43658
     481         */
     482        function test_wp_enqueue_media_single_mime_type() {
     483                $filename      = DIR_TESTDATA . '/images/test-image.jpg';
     484                $contents      = file_get_contents( $filename );
     485                $upload        = wp_upload_bits( basename( $filename ), null, $contents );
     486                $attachment_id = $this->_make_attachment( $upload );
     487
     488                add_filter(
     489                        'media_view_settings',
     490                        array( $this, 'check_settings_for_single' )
     491                );
     492                wp_enqueue_media();
     493                remove_all_filters( 'media_view_settings' );
     494        }
     495
     496        /**
     497         * Test that the media grid uses the correct available multiple media types.
     498         * @ticket 43658
     499         */
     500        function test_wp_enqueue_media_multiple_mime_types() {
     501                $filename      = DIR_TESTDATA . '/images/test-image.jpg';
     502                $contents      = file_get_contents( $filename );
     503                $upload        = wp_upload_bits( basename( $filename ), null, $contents );
     504                $attachment_id = $this->_make_attachment( $upload );
     505
     506                $filename      = DIR_TESTDATA . '/uploads/small-audio.mp3';
     507                $contents      = file_get_contents( $filename );
     508                $upload        = wp_upload_bits( basename( $filename ), null, $contents );
     509                $attachment_id = $this->_make_attachment( $upload );
     510
     511                add_filter(
     512                        'media_view_settings',
     513                        array( $this, 'check_settings_for_multiple' )
     514                );
     515                wp_enqueue_media();
     516        }
     517
    468518        /**
    469519         * @ticket 21594
    470520         */