Make WordPress Core

Ticket #30202: 30202.1.diff

File 30202.1.diff, 3.2 KB (added by earnjam, 10 years ago)
  • src/wp-includes/ms-functions.php

     
    16811681 * @since MU
    16821682 *
    16831683 * @param string $directory
     1684 * @param string $exclude Optional. Directory to exclude from the total.
    16841685 * @return int
    16851686 */
    1686 function get_dirsize( $directory ) {
    1687         $dirsize = get_transient( 'dirsize_cache' );
    1688         if ( is_array( $dirsize ) && isset( $dirsize[ $directory ][ 'size' ] ) )
     1687function get_dirsize( $directory, $exclude = null ) {
     1688
     1689        // Don't get cache for calls with excludes unless it's the main site
     1690        if ( ! is_null( $exclude ) || ( is_main_site() && '/sites' === $exclude ) ) {
     1691                $dirsize = get_transient( 'dirsize_cache' );
     1692        } else {
     1693                $dirsize = false;
     1694        }
     1695
     1696        if ( is_array( $dirsize ) && isset( $dirsize[ $directory ][ 'size' ] ) ) {
    16891697                return $dirsize[ $directory ][ 'size' ];
     1698        }
    16901699
    1691         if ( false == is_array( $dirsize ) )
     1700        if ( false == is_array( $dirsize ) ) {
    16921701                $dirsize = array();
     1702        }
    16931703
    1694         $dirsize[ $directory ][ 'size' ] = recurse_dirsize( $directory );
     1704        $dirsize[ $directory ][ 'size' ] = recurse_dirsize( $directory, $exclude );
    16951705
    1696         set_transient( 'dirsize_cache', $dirsize, HOUR_IN_SECONDS );
     1706        // Don't cache calls with excludes unless it's the main site
     1707        if ( ! is_null( $exclude ) || ( is_main_site() && '/sites' === $exclude ) ) {
     1708                set_transient( 'dirsize_cache', $dirsize, HOUR_IN_SECONDS );
     1709        }
    16971710        return $dirsize[ $directory ][ 'size' ];
    16981711}
    16991712
     
    17061719 * @since MU
    17071720 *
    17081721 * @param string $directory
     1722 * @param string $exclude Optional. Directory to exclude from the total.
    17091723 * @return int|false
    17101724 */
    1711 function recurse_dirsize( $directory ) {
     1725function recurse_dirsize( $directory, $exclude = null ) {
    17121726        $size = 0;
    17131727
    17141728        $directory = untrailingslashit( $directory );
    17151729
    1716         if ( !file_exists($directory) || !is_dir( $directory ) || !is_readable( $directory ) )
     1730        if ( ! file_exists( $directory ) || ! is_dir( $directory ) || ! is_readable( $directory ) || $directory === $exclude ) {
    17171731                return false;
     1732        }
    17181733
    1719         if ($handle = opendir($directory)) {
    1720                 while(($file = readdir($handle)) !== false) {
     1734        if ( $handle = opendir( $directory ) ) {
     1735                while ( ( $file = readdir( $handle ) ) !== false ) {
    17211736                        $path = $directory.'/'.$file;
    1722                         if ($file != '.' && $file != '..') {
    1723                                 if (is_file($path)) {
    1724                                         $size += filesize($path);
    1725                                 } elseif (is_dir($path)) {
    1726                                         $handlesize = recurse_dirsize($path);
    1727                                         if ($handlesize > 0)
     1737                        if ( $file != '.' && $file != '..' ) {
     1738                                if ( is_file( $path ) ) {
     1739                                        $size += filesize( $path );
     1740                                } elseif ( is_dir( $path ) ) {
     1741                                        $handlesize = recurse_dirsize( $path, $exclude );
     1742                                        if ( $handlesize > 0 ) {
    17281743                                                $size += $handlesize;
     1744                                        }
    17291745                                }
    17301746                        }
    17311747                }
    1732                 closedir($handle);
     1748                closedir( $handle );
    17331749        }
    17341750        return $size;
    17351751}
     
    22952311        $space_used = apply_filters( 'pre_get_space_used', false );
    22962312        if ( false === $space_used ) {
    22972313                $upload_dir = wp_upload_dir();
    2298                 $space_used = get_dirsize( $upload_dir['basedir'] ) / 1024 / 1024;
     2314                $exclude = ( is_main_site() ) ? $upload_dir['basedir'] . '/sites' : null;
     2315                $space_used = get_dirsize( $upload_dir['basedir'], $exclude ) / 1024 / 1024;
    22992316        }
    23002317
    23012318        return $space_used;