WordPress.org

Make WordPress Core

Ticket #35106: 35106.2.patch

File 35106.2.patch, 3.9 KB (added by SergeyBiryukov, 6 years ago)
  • src/wp-includes/media.php

     
    878878}
    879879
    880880/**
     881 * Get the attachment path relative to the upload directory.
     882 *
     883 * @since 4.4.1
     884 * @access private
     885 *
     886 * @param string $file Attachment file name.
     887 * @return string Attachment path relative to the upload directory.
     888 */
     889function _wp_get_attachment_relative_path( $file ) {
     890        $dirname = dirname( $file );
     891
     892        if ( false !== strpos( $dirname, 'wp-content/uploads/' ) ) {
     893                // Get the directory name relative to the upload directory (back compat for pre-2.7 uploads)
     894                $dirname = substr( $dirname, strpos( $dirname, 'wp-content/uploads/' ) + 19 );
     895        }
     896
     897        return $dirname;
     898}
     899
     900/**
    881901 * Caches and returns the base URL of the uploads directory.
    882902 *
    883903 * @since 4.4.0
     
    10061026
    10071027        // Uploads are (or have been) in year/month sub-directories.
    10081028        if ( $image_basename !== $image_meta['file'] ) {
    1009                 $dirname = dirname( $image_meta['file'] );
     1029                $dirname = _wp_get_attachment_relative_path( $image_meta['file'] );
    10101030
    10111031                if ( $dirname !== '.' ) {
    10121032                        $image_baseurl = trailingslashit( $image_baseurl ) . $dirname;
  • src/wp-includes/post.php

     
    48794879                                // Replace file location with url location.
    48804880                                $url = str_replace($uploads['basedir'], $uploads['baseurl'], $file);
    48814881                        } elseif ( false !== strpos($file, 'wp-content/uploads') ) {
    4882                                 $url = $uploads['baseurl'] . substr( $file, strpos($file, 'wp-content/uploads') + 18 );
     4882                                // Get the directory name relative to the basedir (back compat for pre-2.7 uploads)
     4883                                $url = $uploads['baseurl'] . '/' . _wp_get_attachment_relative_path( $file );
    48834884                        } else {
    48844885                                // It's a newly-uploaded file, therefore $file is relative to the basedir.
    48854886                                $url = $uploads['baseurl'] . "/$file";
  • tests/phpunit/tests/media.php

     
    866866        }
    867867
    868868        /**
     869         * @ticket 35106
     870         */
     871        function test_wp_calculate_image_srcset_with_absolute_path_in_meta() {
     872                global $_wp_additional_image_sizes;
     873
     874                $year_month = date('Y/m');
     875                $image_meta = wp_get_attachment_metadata( self::$large_id );
     876                $uploads_dir_url = 'http://' . WP_TESTS_DOMAIN . '/wp-content/uploads/';
     877
     878                // Set up test cases for all expected size names.
     879                $intermediates = array( 'medium', 'medium_large', 'large', 'full' );
     880
     881                // Add any soft crop intermediate sizes.
     882                foreach ( $_wp_additional_image_sizes as $name => $additional_size ) {
     883                        if ( ! $_wp_additional_image_sizes[$name]['crop'] || 0 === $_wp_additional_image_sizes[$name]['height'] ) {
     884                                $intermediates[] = $name;
     885                        }
     886                }
     887
     888                $expected = '';
     889
     890                foreach( $image_meta['sizes'] as $name => $size ) {
     891                        // Whitelist the sizes that should be included so we pick up 'medium_large' in 4.4.
     892                        if ( in_array( $name, $intermediates ) ) {
     893                                $expected .= $uploads_dir_url . $year_month . '/' . $size['file'] . ' ' . $size['width'] . 'w, ';
     894                        }
     895                }
     896
     897                // Add the full size width at the end.
     898                $expected .= $uploads_dir_url . $image_meta['file'] . ' ' . $image_meta['width'] .'w';
     899
     900                // Prepend an absolute path to simulate a pre-2.7 upload
     901                $image_meta['file'] = 'H:\home\wordpress\trunk/wp-content/uploads/' . $image_meta['file'];
     902
     903                foreach ( $intermediates as $int ) {
     904                        $image_url = wp_get_attachment_image_url( self::$large_id, $int );
     905                        $size_array = $this->_get_image_size_array_from_name( $int );
     906                        $this->assertSame( $expected, wp_calculate_image_srcset( $size_array, $image_url, $image_meta ) );
     907                }
     908        }
     909
     910        /**
    869911         * @ticket 33641
    870912         */
    871913        function test_wp_calculate_image_srcset_false() {