WordPress.org

Make WordPress Core

Ticket #31148: 31148.3.patch

File 31148.3.patch, 5.7 KB (added by spacedmonkey, 6 years ago)
  • wp-includes/ms-functions.php

    diff --git a/wp-includes/ms-functions.php b/wp-includes/ms-functions.php
    index ecb6a1f..84018ef 100644
    a b function wp_is_large_network( $using = 'sites' ) { 
    24162416 *
    24172417 *     @type int|array $network_id A network ID or array of network IDs. Set to null to retrieve sites
    24182418 *                                 from all networks. Defaults to current network ID.
     2419 *     @type int|array $site_id   A site ID or array of site IDs. Set to null to retrieve all sites. Default null, for any.
    24192420 *     @type int       $public     Retrieve public or non-public sites. Default null, for any.
    24202421 *     @type int       $archived   Retrieve archived or non-archived sites. Default null, for any.
    24212422 *     @type int       $mature     Retrieve mature or non-mature sites. Default null, for any.
    24222423 *     @type int       $spam       Retrieve spam or non-spam sites. Default null, for any.
    24232424 *     @type int       $deleted    Retrieve deleted or non-deleted sites. Default null, for any.
     2425 *     @type string|array $domain  A domain or array of domains to search for. Set to null to retrieve all sites. Default null, for any.
     2426 *     @type string|array $path    A path or array of paths to search for. Set to null to retrieve all sites. Default null, for any.
    24242427 *     @type int       $limit      Number of sites to limit the query to. Default 100.
    24252428 *     @type int       $offset     Exclude the first x sites. Used in combination with the $limit parameter. Default 0.
     2429 *     @type string    $orderby    Field(s) to order sites by. Accepts site fields ('ids', 'domain', 'last_updated', registered', 'path').
     2430 *                                 Defaults to 'none'.
     2431 *     @type string    $order      Whether to order terms in ascending or descending order.
     2432 *                                 Accepts 'ASC' (ascending) or 'DESC' (descending).
     2433 *                                 Default 'ASC'.
     2434 *         @type string    $fields     Which fields to return. Single field or all fields (string).
     2435 *                                 Default all fields. Accepts 'all', 'ids', 'domain'.
    24262436 * }
    24272437 * @return array An empty array if the install is considered "large" via wp_is_large_network(). Otherwise,
    24282438 *               an associative array of site data arrays, each containing the site (network) ID, blog ID,
    function wp_is_large_network( $using = 'sites' ) { 
    24322442function wp_get_sites( $args = array() ) {
    24332443        global $wpdb;
    24342444
    2435         if ( wp_is_large_network() )
    2436                 return array();
    2437 
    24382445        $defaults = array(
    24392446                'network_id' => $wpdb->siteid,
     2447                'site_id'    => null,
    24402448                'public'     => null,
    24412449                'archived'   => null,
    24422450                'mature'     => null,
    24432451                'spam'       => null,
    24442452                'deleted'    => null,
     2453                'domain'     => null,
     2454                'path'       => null,
    24452455                'limit'      => 100,
    24462456                'offset'     => 0,
     2457                'order'      => 'ASC',
     2458                'orderby'    => 'none',
     2459                'fields'     => 'all',
    24472460        );
    24482461
    24492462        $args = wp_parse_args( $args, $defaults );
    24502463
    2451         $query = "SELECT * FROM $wpdb->blogs WHERE 1=1 ";
     2464        switch ( $args['fields'] ) {
     2465                case 'ids':
     2466                        $fields = "blog_id";
     2467                        break;
     2468                case 'domain':
     2469                        $fields = $args['fields'];
     2470                        break;
     2471                default:
     2472                        $fields = "*";
     2473                        break;
     2474        }
     2475
     2476        $query = "SELECT $fields FROM $wpdb->blogs WHERE 1=1 ";
    24522477
    24532478        if ( isset( $args['network_id'] ) && ( is_array( $args['network_id'] ) || is_numeric( $args['network_id'] ) ) ) {
    24542479                $network_ids = implode( ',', wp_parse_id_list( $args['network_id'] ) );
    24552480                $query .= "AND site_id IN ($network_ids) ";
    24562481        }
    24572482
    2458         if ( isset( $args['public'] ) )
     2483        if ( isset( $args['site_id'] ) && ( is_array( $args['site_id'] ) || is_numeric( $args['site_id'] ) ) ) {
     2484                $site_ids = implode( ',', wp_parse_id_list( $args['site_id'] ) );
     2485                $query .= "AND blog_id IN ($site_ids) ";
     2486        }
     2487
     2488        if ( isset( $args['path'] ) ) {
     2489                $paths        = (array) $args['path'];
     2490                $search_paths = "'" . implode( "', '", $wpdb->_escape( $paths ) ) . "'";
     2491                $query .= "AND path IN ($search_paths) ";
     2492        }
     2493
     2494        if ( isset( $args['domain'] ) ) {
     2495                $domains        = (array) $args['domain'];
     2496                $search_domains = "'" . implode( "', '", $wpdb->_escape( $domains ) ) . "'";
     2497                $query .= "AND domain IN ($search_domains) ";
     2498        }
     2499
     2500        if ( isset( $args['public'] ) ) {
    24592501                $query .= $wpdb->prepare( "AND public = %d ", $args['public'] );
     2502        }
    24602503
    2461         if ( isset( $args['archived'] ) )
     2504        if ( isset( $args['archived'] ) ) {
    24622505                $query .= $wpdb->prepare( "AND archived = %d ", $args['archived'] );
     2506        }
    24632507
    2464         if ( isset( $args['mature'] ) )
     2508        if ( isset( $args['mature'] ) ) {
    24652509                $query .= $wpdb->prepare( "AND mature = %d ", $args['mature'] );
     2510        }
    24662511
    2467         if ( isset( $args['spam'] ) )
     2512        if ( isset( $args['spam'] ) ) {
    24682513                $query .= $wpdb->prepare( "AND spam = %d ", $args['spam'] );
     2514        }
    24692515
    2470         if ( isset( $args['deleted'] ) )
     2516        if ( isset( $args['deleted'] ) ) {
    24712517                $query .= $wpdb->prepare( "AND deleted = %d ", $args['deleted'] );
     2518        }
     2519
     2520        $order = ( 'desc' == strtolower( $args['order'] ) ) ? 'DESC' : 'ASC';
     2521
     2522        switch ( $args['orderby'] ) {
     2523                case 'domain':
     2524                case 'last_updated':
     2525                case 'path':
     2526                case 'registered':
     2527                        $orderby = $args['orderby'];
     2528                        break;
     2529                case 'ids':
     2530                default:
     2531                        $orderby = "blog_id";
     2532                        break;
     2533        }
     2534        $query .= $wpdb->prepare( "ORDER BY %s %s", $orderby, $order );
    24722535
    24732536        if ( isset( $args['limit'] ) && $args['limit'] ) {
    2474                 if ( isset( $args['offset'] ) && $args['offset'] )
     2537                if ( isset( $args['offset'] ) && $args['offset'] ) {
    24752538                        $query .= $wpdb->prepare( "LIMIT %d , %d ", $args['offset'], $args['limit'] );
    2476                 else
     2539                } else {
    24772540                        $query .= $wpdb->prepare( "LIMIT %d ", $args['limit'] );
     2541                }
    24782542        }
    24792543
    2480         $site_results = $wpdb->get_results( $query, ARRAY_A );
     2544        if ( $fields == "*" ) {
     2545                $site_results = $wpdb->get_results( $query, ARRAY_A );
     2546        } else {
     2547                $site_results = $wpdb->get_col( $query );
     2548        }
    24812549
    24822550        return $site_results;
    24832551}