WordPress.org

Make WordPress Core

Changeset 40590


Ignore:
Timestamp:
05/09/17 15:50:04 (10 months ago)
Author:
flixos90
Message:

Multisite: Add $network_id parameter to wp_is_large_network().

Now that get_blog_count() and get_user_count() both support passing a $network_id parameter (see [40370] and [40371]), similar functionality is now available for wp_is_large_network(). In addition, the filter wp_is_large_network now accepts the network ID as its fourth parameter.

This changeset furthermore introduces unit tests for the wp_is_large_network() function and its filter.

Fixes #40489.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/ms-functions.php

    r40589 r40590  
    24912491 * 
    24922492 * @since 3.3.0 
    2493  * @param string $using 'sites or 'users'. Default is 'sites'. 
     2493 * @since 4.8.0 The $network_id parameter has been added. 
     2494 * 
     2495 * @param string   $using      'sites or 'users'. Default is 'sites'. 
     2496 * @param int|null $network_id ID of the network. Default is the current network. 
    24942497 * @return bool True if the network meets the criteria for large. False otherwise. 
    24952498 */ 
    2496 function wp_is_large_network( $using = 'sites' ) { 
     2499function wp_is_large_network( $using = 'sites', $network_id = null ) { 
     2500    $network_id = (int) $network_id; 
     2501    if ( ! $network_id ) { 
     2502        $network_id = get_current_network_id(); 
     2503    } 
     2504 
    24972505    if ( 'users' == $using ) { 
    2498         $count = get_user_count(); 
     2506        $count = get_user_count( $network_id ); 
    24992507        /** 
    25002508         * Filters whether the network is considered large. 
    25012509         * 
    25022510         * @since 3.3.0 
     2511         * @since 4.8.0 The $network_id parameter has been added. 
    25032512         * 
    25042513         * @param bool   $is_large_network Whether the network has more than 10000 users or sites. 
    25052514         * @param string $component        The component to count. Accepts 'users', or 'sites'. 
    25062515         * @param int    $count            The count of items for the component. 
     2516         * @param int    $network_id       The ID of the network being checked. 
    25072517         */ 
    2508         return apply_filters( 'wp_is_large_network', $count > 10000, 'users', $count ); 
    2509     } 
    2510  
    2511     $count = get_blog_count(); 
     2518        return apply_filters( 'wp_is_large_network', $count > 10000, 'users', $count, $network_id ); 
     2519    } 
     2520 
     2521    $count = get_blog_count( $network_id ); 
    25122522    /** This filter is documented in wp-includes/ms-functions.php */ 
    2513     return apply_filters( 'wp_is_large_network', $count > 10000, 'sites', $count ); 
     2523    return apply_filters( 'wp_is_large_network', $count > 10000, 'sites', $count, $network_id ); 
    25142524} 
    25152525 
  • trunk/tests/phpunit/tests/multisite/network.php

    r40486 r40590  
    471471        $this->assertTrue( $site_count > 0 && $user_count > 0 ); 
    472472    } 
     473 
     474    /** 
     475     * @ticket 40489 
     476     * @dataProvider data_wp_is_large_network 
     477     */ 
     478    public function test_wp_is_large_network( $using, $count, $expected, $different_network ) { 
     479        $network_id = $different_network ? self::$different_network_id : null; 
     480        $network_option = 'users' === $using ? 'user_count' : 'blog_count'; 
     481 
     482        update_network_option( $network_id, $network_option, $count ); 
     483 
     484        $result = wp_is_large_network( $using, $network_id ); 
     485        if ( $expected ) { 
     486            $this->assertTrue( $result ); 
     487        } else { 
     488            $this->assertFalse( $result ); 
     489        } 
     490    } 
     491 
     492    public function data_wp_is_large_network() { 
     493        return array( 
     494            array( 'sites', 10000, false, false ), 
     495            array( 'sites', 10001, true, false ), 
     496            array( 'users', 10000, false, false ), 
     497            array( 'users', 10001, true, false ), 
     498            array( 'sites', 10000, false, true ), 
     499            array( 'sites', 10001, true, true ), 
     500            array( 'users', 10000, false, true ), 
     501            array( 'users', 10001, true, true ), 
     502        ); 
     503    } 
     504 
     505    /** 
     506     * @ticket 40489 
     507     * @dataProvider data_wp_is_large_network_filtered_by_component 
     508     */ 
     509    public function test_wp_is_large_network_filtered_by_component( $using, $count, $expected, $different_network ) { 
     510        $network_id = $different_network ? self::$different_network_id : null; 
     511        $network_option = 'users' === $using ? 'user_count' : 'blog_count'; 
     512 
     513        update_network_option( $network_id, $network_option, $count ); 
     514 
     515        add_filter( 'wp_is_large_network', array( $this, 'filter_wp_is_large_network_for_users' ), 10, 3 ); 
     516        $result = wp_is_large_network( $using, $network_id ); 
     517        remove_filter( 'wp_is_large_network', array( $this, 'filter_wp_is_large_network_for_users' ), 10 ); 
     518 
     519        if ( $expected ) { 
     520            $this->assertTrue( $result ); 
     521        } else { 
     522            $this->assertFalse( $result ); 
     523        } 
     524    } 
     525 
     526    public function data_wp_is_large_network_filtered_by_component() { 
     527        return array( 
     528            array( 'sites', 10000, false, false ), 
     529            array( 'sites', 10001, true, false ), 
     530            array( 'users', 1000, false, false ), 
     531            array( 'users', 1001, true, false ), 
     532            array( 'sites', 10000, false, true ), 
     533            array( 'sites', 10001, true, true ), 
     534            array( 'users', 1000, false, true ), 
     535            array( 'users', 1001, true, true ), 
     536        ); 
     537    } 
     538 
     539    public function filter_wp_is_large_network_for_users( $is_large_network, $using, $count ) { 
     540        if ( 'users' === $using ) { 
     541            return $count > 1000; 
     542        } 
     543 
     544        return $is_large_network; 
     545    } 
     546 
     547    /** 
     548     * @ticket 40489 
     549     * @dataProvider data_wp_is_large_network_filtered_by_network 
     550     */ 
     551    public function test_wp_is_large_network_filtered_by_network( $using, $count, $expected, $different_network ) { 
     552        $network_id = $different_network ? self::$different_network_id : null; 
     553        $network_option = 'users' === $using ? 'user_count' : 'blog_count'; 
     554 
     555        update_network_option( $network_id, $network_option, $count ); 
     556 
     557        add_filter( 'wp_is_large_network', array( $this, 'filter_wp_is_large_network_on_different_network' ), 10, 4 ); 
     558        $result = wp_is_large_network( $using, $network_id ); 
     559        remove_filter( 'wp_is_large_network', array( $this, 'filter_wp_is_large_network_on_different_network' ), 10 ); 
     560 
     561        if ( $expected ) { 
     562            $this->assertTrue( $result ); 
     563        } else { 
     564            $this->assertFalse( $result ); 
     565        } 
     566    } 
     567 
     568    public function data_wp_is_large_network_filtered_by_network() { 
     569        return array( 
     570            array( 'sites', 10000, false, false ), 
     571            array( 'sites', 10001, true, false ), 
     572            array( 'users', 10000, false, false ), 
     573            array( 'users', 10001, true, false ), 
     574            array( 'sites', 1000, false, true ), 
     575            array( 'sites', 1001, true, true ), 
     576            array( 'users', 1000, false, true ), 
     577            array( 'users', 1001, true, true ), 
     578        ); 
     579    } 
     580 
     581    public function filter_wp_is_large_network_on_different_network( $is_large_network, $using, $count, $network_id ) { 
     582        if ( $network_id === (int) self::$different_network_id ) { 
     583            return $count > 1000; 
     584        } 
     585 
     586        return $is_large_network; 
     587    } 
    473588} 
    474589 
Note: See TracChangeset for help on using the changeset viewer.