Ticket #30202: 30202.2.diff
File 30202.2.diff, 5.4 KB (added by , 8 years ago) |
---|
-
src/wp-includes/ms-functions.php
1683 1683 * @since MU 1684 1684 * 1685 1685 * @param string $directory 1686 * @param string $exclude Optional. Directory to exclude from the total. 1686 1687 * @return int 1687 1688 */ 1688 function get_dirsize( $directory ) { 1689 $dirsize = get_transient( 'dirsize_cache' ); 1690 if ( is_array( $dirsize ) && isset( $dirsize[ $directory ][ 'size' ] ) ) 1689 function get_dirsize( $directory, $exclude = null ) { 1690 // Don't get cache for calls with excludes unless it's the main site 1691 if ( ! is_null( $exclude ) || ( is_main_site() && '/sites' === $exclude ) ) { 1692 $dirsize = get_transient( 'dirsize_cache' ); 1693 } else { 1694 $dirsize = false; 1695 } 1696 1697 if ( is_array( $dirsize ) && isset( $dirsize[ $directory ][ 'size' ] ) ) { 1691 1698 return $dirsize[ $directory ][ 'size' ]; 1699 } 1692 1700 1693 if ( ! is_array( $dirsize ) ) 1701 if ( ! is_array( $dirsize ) ) { 1694 1702 $dirsize = array(); 1703 } 1695 1704 1696 $dirsize[ $directory ][ 'size' ] = recurse_dirsize( $directory );1705 $dirsize[ $directory ][ 'size' ] = recurse_dirsize( $directory, $exclude ); 1697 1706 1698 set_transient( 'dirsize_cache', $dirsize, HOUR_IN_SECONDS ); 1707 // Don't cache calls with excludes unless it's the main site 1708 if ( ! is_null( $exclude ) || ( is_main_site() && '/sites' === $exclude ) ) { 1709 set_transient( 'dirsize_cache', $dirsize, HOUR_IN_SECONDS ); 1710 } 1699 1711 return $dirsize[ $directory ][ 'size' ]; 1700 1712 } 1701 1713 … … 1708 1720 * @since MU 1709 1721 * 1710 1722 * @param string $directory 1723 * @param string $exclude Optional. Directory to exclude from the total. 1711 1724 * @return int|false 1712 1725 */ 1713 function recurse_dirsize( $directory ) {1726 function recurse_dirsize( $directory, $exclude = null ) { 1714 1727 $size = 0; 1715 1728 1716 1729 $directory = untrailingslashit( $directory ); 1717 1730 1718 if ( ! file_exists($directory) || !is_dir( $directory ) || !is_readable( $directory ) )1731 if ( ! file_exists( $directory ) || ! is_dir( $directory ) || ! is_readable( $directory ) || $directory === $exclude ) { 1719 1732 return false; 1733 } 1720 1734 1721 if ( $handle = opendir($directory)) {1722 while( ($file = readdir($handle)) !== false) {1723 $path = $directory .'/'.$file;1724 if ( $file != '.' && $file != '..') {1725 if ( is_file($path)) {1726 $size += filesize( $path);1727 } elseif ( is_dir($path)) {1728 $handlesize = recurse_dirsize( $path);1729 if ( $handlesize > 0)1735 if ( $handle = opendir( $directory ) ) { 1736 while( ( $file = readdir( $handle ) ) !== false ) { 1737 $path = $directory . '/' . $file; 1738 if ( $file !== '.' && $file !== '..' ) { 1739 if ( is_file( $path ) ) { 1740 $size += filesize( $path ); 1741 } elseif ( is_dir( $path ) ) { 1742 $handlesize = recurse_dirsize( $path, $exclude ); 1743 if ( $handlesize > 0 ) { 1730 1744 $size += $handlesize; 1745 } 1731 1746 } 1732 1747 } 1733 1748 } 1734 closedir( $handle);1749 closedir( $handle ); 1735 1750 } 1736 1751 return $size; 1737 1752 } … … 2297 2312 $space_used = apply_filters( 'pre_get_space_used', false ); 2298 2313 if ( false === $space_used ) { 2299 2314 $upload_dir = wp_upload_dir(); 2300 $space_used = get_dirsize( $upload_dir['basedir'] ) / 1024 / 1024; 2315 $exclude = ( is_main_site() ) ? $upload_dir['basedir'] . '/sites' : null; 2316 $space_used = get_dirsize( $upload_dir['basedir'], $exclude ) / 1024 / 1024; 2301 2317 } 2302 2318 2303 2319 return $space_used; -
tests/phpunit/tests/multisite/site.php
11 11 class Tests_Multisite_Site extends WP_UnitTestCase { 12 12 protected $suppress = false; 13 13 14 protected $blog_upload_space; 15 14 16 function setUp() { 15 17 global $wpdb; 16 18 parent::setUp(); … … 17 19 $this->suppress = $wpdb->suppress_errors(); 18 20 19 21 $_SERVER[ 'REMOTE_ADDR' ] = ''; 22 23 if ( ! isset( $this->blog_upload_space ) ) { 24 $space_used = get_space_used(); 25 $this->blog_upload_space = $space_used + get_site_option( 'blog_upload_space' ); 26 } 27 28 update_site_option( 'blog_upload_space', $this->blog_upload_space ); 20 29 } 21 30 22 31 function tearDown() { … … 1377 1386 } 1378 1387 1379 1388 /** 1389 * Test that a site's upload space used is actually being counted 1390 */ 1391 function test_get_space_used() { 1392 $blog_id = $this->factory->blog->create(); 1393 switch_to_blog( $blog_id ); 1394 1395 $this->assertEquals( 0, get_space_used() ); 1396 1397 // Upload a file to the new site. 1398 $filename = rand_str().'.jpg'; 1399 $contents = rand_str(); 1400 $file = wp_upload_bits( $filename, null, $contents ); 1401 1402 // get_space_used() is measures in MB, get size of new file in MB 1403 $size = filesize( $file['file'] ) / 1024 / 1024; 1404 1405 delete_transient( 'dirsize_cache' ); 1406 1407 $this->assertEquals( $size, get_space_used() ); 1408 1409 restore_current_blog(); 1410 } 1411 1412 /** 1413 * Test that uploads for other sites are excluded from counting towards the space used by the main site 1414 */ 1415 function test_get_space_used_exclude() { 1416 $space_used = get_space_used(); 1417 1418 $blog_id = $this->factory->blog->create(); 1419 switch_to_blog( $blog_id ); 1420 1421 // Upload a file to the new site. 1422 $filename = rand_str().'.jpg'; 1423 $contents = rand_str(); 1424 wp_upload_bits( $filename, null, $contents ); 1425 1426 restore_current_blog(); 1427 1428 delete_transient( 'dirsize_cache' ); 1429 1430 $this->assertEquals( $space_used, get_space_used() ); 1431 } 1432 1433 /** 1380 1434 * Test the primary purpose of get_blog_post(), to retrieve a post from 1381 1435 * another site on the network. 1382 1436 */