WordPress.org

Make WordPress Core

Ticket #19879: 19879.diff

File 19879.diff, 5.0 KB (added by A5hleyRich, 4 years ago)
  • src/wp-admin/includes/file.php

    diff --git src/wp-admin/includes/file.php src/wp-admin/includes/file.php
    index d588e15..eb6dd0e 100644
    function _wp_handle_upload( &$file, $overrides, $time, $action ) { 
    378378        $url = $uploads['url'] . "/$filename";
    379379
    380380        if ( is_multisite() ) {
    381                 delete_transient( 'dirsize_cache' );
     381                clear_dirsize_cache( $new_file );
    382382        }
    383383
    384384        /**
  • src/wp-includes/ms-functions.php

    diff --git src/wp-includes/ms-functions.php src/wp-includes/ms-functions.php
    index f41d2b6..55d3d51 100644
    function get_most_recent_post_of_user( $user_id ) { 
    16581658 * @return int Size of the directory in MB.
    16591659 */
    16601660function get_dirsize( $directory ) {
    1661         $dirsize = get_transient( 'dirsize_cache' );
    1662         if ( is_array( $dirsize ) && isset( $dirsize[ $directory ][ 'size' ] ) )
    1663                 return $dirsize[ $directory ][ 'size' ];
    1664 
    1665         if ( ! is_array( $dirsize ) )
    1666                 $dirsize = array();
    1667 
    16681661        // Exclude individual site directories from the total when checking the main site,
    16691662        // as they are subdirectories and should not be counted.
    16701663        if ( is_main_site() ) {
    1671                 $dirsize[ $directory ][ 'size' ] = recurse_dirsize( $directory, $directory . '/sites' );
     1664                $size = recurse_dirsize( $directory, $directory . '/sites' );
    16721665        } else {
    1673                 $dirsize[ $directory ][ 'size' ] = recurse_dirsize( $directory );
     1666                $size = recurse_dirsize( $directory );
    16741667        }
    16751668
    1676         set_transient( 'dirsize_cache', $dirsize, HOUR_IN_SECONDS );
    1677         return $dirsize[ $directory ][ 'size' ];
     1669        return $size;
    16781670}
    16791671
    16801672/**
    function get_dirsize( $directory ) { 
    16861678 * @since MU
    16871679 * @since 4.3.0 $exclude parameter added.
    16881680 *
    1689  * @param string $directory Full path of a directory.
    1690  * @param string $exclude   Optional. Full path of a subdirectory to exclude from the total.
     1681 * @param string $directory       Full path of a directory.
     1682 * @param string $exclude         Optional. Full path of a subdirectory to exclude from the total.
     1683 * @param array  $directory_cache Optional. Array of cached directory paths.
    16911684 * @return int|false Size in MB if a valid directory. False if not.
    16921685 */
    1693 function recurse_dirsize( $directory, $exclude = null ) {
     1686function recurse_dirsize( $directory, $exclude = null, &$directory_cache = null ) {
    16941687        $size = 0;
    16951688
    1696         $directory = untrailingslashit( $directory );
     1689        $directory  = untrailingslashit( $directory );
     1690        $cache_path = normalize_dirsize_cache_path( $directory );
     1691        $save_cache = false;
     1692
     1693        if ( ! isset( $directory_cache ) ) {
     1694                $directory_cache = get_transient( 'dirsize_cache' );
     1695                $save_cache      = true;
     1696        }
     1697
     1698        if ( isset( $directory_cache[ $cache_path ] ) ) {
     1699                return $directory_cache[ $cache_path ];
     1700        }
    16971701
    16981702        if ( ! file_exists( $directory ) || ! is_dir( $directory ) || ! is_readable( $directory ) || $directory === $exclude ) {
    16991703                return false;
    function recurse_dirsize( $directory, $exclude = null ) { 
    17061710                                if (is_file($path)) {
    17071711                                        $size += filesize($path);
    17081712                                } elseif (is_dir($path)) {
    1709                                         $handlesize = recurse_dirsize( $path, $exclude );
     1713                                        $handlesize = recurse_dirsize( $path, $exclude, $directory_cache );
    17101714                                        if ($handlesize > 0)
    17111715                                                $size += $handlesize;
    17121716                                }
    function recurse_dirsize( $directory, $exclude = null ) { 
    17141718                }
    17151719                closedir($handle);
    17161720        }
     1721
     1722        $directory_cache[ $cache_path ] = $size;
     1723
     1724        if ( $save_cache ) {
     1725                set_transient( 'dirsize_cache', $directory_cache );
     1726        }
     1727
    17171728        return $size;
    17181729}
    17191730
    17201731/**
     1732 * Clear dirsize_cache
     1733 *
     1734 * Remove the current directory and all parent directories
     1735 * from the dirsize_cache transient.
     1736 *
     1737 * @param string $path Full path of a directory.
     1738 */
     1739function clear_dirsize_cache( $path ) {
     1740        $directory_cache = get_transient( 'dirsize_cache' );
     1741
     1742        if ( empty( $directory_cache ) ) {
     1743                return;
     1744        }
     1745
     1746        $cache_path = normalize_dirsize_cache_path( $path );
     1747        unset( $directory_cache[ $cache_path ] );
     1748
     1749        while ( DIRECTORY_SEPARATOR !== $cache_path && '.' !== $cache_path ) {
     1750                $cache_path = dirname( $cache_path );
     1751                unset( $directory_cache[ $cache_path ] );
     1752        }
     1753
     1754        set_transient( 'dirsize_cache', $directory_cache );
     1755}
     1756
     1757/**
     1758 * Normalize dirsize cache path.
     1759 *
     1760 * Ensures array keys follow the same format.
     1761 *
     1762 * @param string $path
     1763 * @return string
     1764 */
     1765function normalize_dirsize_cache_path( $path ) {
     1766        $path = str_replace( ABSPATH, '', $path );
     1767
     1768        return untrailingslashit( $path );
     1769}
     1770
     1771/**
    17211772 * Check an array of MIME types against a whitelist.
    17221773 *
    17231774 * WordPress ships with a set of allowed upload filetypes,
  • src/wp-includes/post.php

    diff --git src/wp-includes/post.php src/wp-includes/post.php
    index d0bc1a3..254de80 100644
    function wp_delete_attachment( $post_id, $force_delete = false ) { 
    47044704        $backup_sizes = get_post_meta( $post->ID, '_wp_attachment_backup_sizes', true );
    47054705        $file = get_attached_file( $post_id );
    47064706
    4707         if ( is_multisite() )
    4708                 delete_transient( 'dirsize_cache' );
     4707        if ( is_multisite() ) {
     4708                clear_dirsize_cache( $file );
     4709        }
    47094710
    47104711        /**
    47114712         * Fires before an attachment is deleted, at the start of wp_delete_attachment().