WordPress.org

Make WordPress Core

Ticket #14511: 14511.5.diff

File 14511.5.diff, 4.0 KB (added by jeremyfelt, 7 years ago)
  • src/wp-includes/ms-functions.php

     
    19871987        $count = get_blog_count();
    19881988        return apply_filters( 'wp_is_large_network', $count > 10000, 'sites', $count );
    19891989}
     1990
     1991/**
     1992 * Return an array of sites on the specified network. If no network is specified,
     1993 * return all sites, regardless of network.
     1994 *
     1995 * @since 3.7.0
     1996 *
     1997 * @param array $args {
     1998 *     Array of arguments. Optional.
     1999 *
     2000 *     @type int|array 'network_id' A network ID or array of network IDs. Default null.
     2001 *     @type int       'public'     Retrieve public or non-public sites. Default null.
     2002 *     @type int       'archived'   Retrieve archived or non-archived sites. Default null.
     2003 *     @type int       'mature'     Retrieve mature or non-mature sites. Default null.
     2004 *     @type int       'spam'       Retrieve spam or non-spam sites. Default null.
     2005 *     @type int       'deleted'    Retrieve deleted or non-deleted sites. Default null.
     2006 *     @type int       'limit'      Number of sites to limit the query to. Default 100.
     2007 * }
     2008 *
     2009 * @return array An array of site data
     2010 */
     2011function wp_get_sites( $args = array() ) {
     2012        global $wpdb;
     2013
     2014        if ( wp_is_large_network() )
     2015                return array();
     2016
     2017        $defaults = array(
     2018                'network_id' => null,
     2019                'public'     => null,
     2020                'archived'   => null,
     2021                'mature'     => null,
     2022                'spam'       => null,
     2023                'deleted'    => null,
     2024                'limit'      => 100,
     2025        );
     2026
     2027        $args = wp_parse_args( $args, $defaults );
     2028
     2029        $query = "SELECT * FROM $wpdb->blogs WHERE 1=1 ";
     2030
     2031        if ( isset( $args['network_id'] ) && ( is_array( $args['network_id'] ) || is_numeric( $args['network_id'] ) ) ) {
     2032                $network_ids = array_map('intval', (array) $args['network_id'] );
     2033                $network_ids = implode( ',', $network_ids );
     2034                $query .= "AND site_id IN ($network_ids) ";
     2035        }
     2036
     2037        if ( isset( $args['public'] ) )
     2038                $query .= $wpdb->prepare( "AND public = %d ", $args['public'] );
     2039
     2040        if ( isset( $args['archived'] ) )
     2041                $query .= $wpdb->prepare( "AND archived = %d ", $args['archived'] );
     2042
     2043        if ( isset( $args['mature'] ) )
     2044                $query .= $wpdb->prepare( "AND mature = %d ", $args['mature'] );
     2045
     2046        if ( isset( $args['spam'] ) )
     2047                $query .= $wpdb->prepare( "AND spam = %d ", $args['spam'] );
     2048
     2049        if ( isset( $args['deleted'] ) )
     2050                $query .= $wpdb->prepare( "AND deleted = %d ", $args['deleted'] );
     2051
     2052        if ( isset( $args['limit'] ) )
     2053                $query .= $wpdb->prepare( "LIMIT %d ", $args['limit'] );
     2054
     2055        $site_results = $wpdb->get_results( $query, ARRAY_A );
     2056
     2057        return $site_results;
     2058}
  • tests/phpunit/tests/ms.php

     
    10291029                $this->assertFalse( is_user_spammy( 'testuser1' ) );
    10301030        }
    10311031
     1032        function test_wp_get_sites() {
     1033                // Expect no sites (empty array) when passed an invalid network_id
     1034                $this->assertEquals( array(),  wp_get_sites( array( 'network_id' => 0 ) ) );
     1035
     1036                // Expect 1 site when no network_id is specified
     1037                $this->assertEquals( 1, count( wp_get_sites() ) );
     1038
     1039                // Expect 1 site with a network_id of 1
     1040                $this->assertEquals( 1, count( wp_get_sites( array( 'network_id' => 1 ) ) ) );
     1041
     1042                // Expect 1 site when public is null, as it does not modify the query
     1043                $this->assertEquals( 1, count( wp_get_sites( array( 'network_id' => 1, 'public' => null ) ) ) );
     1044
     1045                // Expect 1 site when public is 1, as we have not set any sites to private
     1046                $this->assertEquals( 1, count( wp_get_sites( array( 'network_id' => 1, 'public' => 1 ) ) ) );
     1047
     1048                // Expect no sites (empty array) when public is set to 0
     1049                $this->assertEquals( array(),  wp_get_sites( array( 'network_id' => 1, 'public' => 0 ) ) );
     1050
     1051                // Set the only site in the database to private
     1052                update_blog_status( 1, 'public', '0' );
     1053
     1054                // Expect 1 site when public is 0
     1055                $this->assertEquals( 1, count( wp_get_sites( array( 'network_id' => 1, 'public' => 0 ) ) ) );
     1056        }
     1057
    10321058}
    10331059
    10341060endif;