WordPress.org

Make WordPress Core

Ticket #31148: 31148.2.patch

File 31148.2.patch, 5.6 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..6a0b300 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').
     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() )
     2445        if ( wp_is_large_network() ) {
    24362446                return array();
     2447        }
    24372448
    24382449        $defaults = array(
    24392450                'network_id' => $wpdb->siteid,
     2451                'site_id'    => null,
    24402452                'public'     => null,
    24412453                'archived'   => null,
    24422454                'mature'     => null,
    24432455                'spam'       => null,
    24442456                'deleted'    => null,
     2457                'domain'     => null,
     2458                'path'       => null,
    24452459                'limit'      => 100,
    24462460                'offset'     => 0,
     2461                'order'      => 'ASC',
     2462                'orderby'    => 'none',
     2463                'fields'     => 'all',
    24472464        );
    24482465
    24492466        $args = wp_parse_args( $args, $defaults );
    24502467
    2451         $query = "SELECT * FROM $wpdb->blogs WHERE 1=1 ";
     2468        switch ( $args['fields'] ) {
     2469                case 'ids':
     2470                        $fields = "blog_id";
     2471                        break;
     2472                case 'domain':
     2473                        $fields = $args['fields'];
     2474                        break;
     2475                default:
     2476                        $fields = "*";
     2477                        break;
     2478        }
     2479
     2480        $query = "SELECT $fields FROM $wpdb->blogs WHERE 1=1 ";
    24522481
    24532482        if ( isset( $args['network_id'] ) && ( is_array( $args['network_id'] ) || is_numeric( $args['network_id'] ) ) ) {
    24542483                $network_ids = implode( ',', wp_parse_id_list( $args['network_id'] ) );
    24552484                $query .= "AND site_id IN ($network_ids) ";
    24562485        }
    24572486
    2458         if ( isset( $args['public'] ) )
     2487        if ( isset( $args['site_id'] ) && ( is_array( $args['site_id'] ) || is_numeric( $args['site_id'] ) ) ) {
     2488                $site_ids = implode( ',', wp_parse_id_list( $args['site_id'] ) );
     2489                $query .= "AND blog_id IN ($site_ids) ";
     2490        }
     2491
     2492        if ( isset( $args['path'] ) ) {
     2493                $paths        = (array) $args['path'];
     2494                $search_paths = "'" . implode( "', '", $wpdb->_escape( $paths ) ) . "'";
     2495                $query .= "AND path IN ($search_paths) ";
     2496        }
     2497
     2498        if ( isset( $args['domain'] ) ) {
     2499                $domains        = (array) $args['domain'];
     2500                $search_domains = "'" . implode( "', '", $wpdb->_escape( $domains ) ) . "'";
     2501                $query .= "AND domain IN ($search_domains) ";
     2502        }
     2503
     2504        if ( isset( $args['public'] ) ) {
    24592505                $query .= $wpdb->prepare( "AND public = %d ", $args['public'] );
     2506        }
    24602507
    2461         if ( isset( $args['archived'] ) )
     2508        if ( isset( $args['archived'] ) ) {
    24622509                $query .= $wpdb->prepare( "AND archived = %d ", $args['archived'] );
     2510        }
    24632511
    2464         if ( isset( $args['mature'] ) )
     2512        if ( isset( $args['mature'] ) ) {
    24652513                $query .= $wpdb->prepare( "AND mature = %d ", $args['mature'] );
     2514        }
    24662515
    2467         if ( isset( $args['spam'] ) )
     2516        if ( isset( $args['spam'] ) ) {
    24682517                $query .= $wpdb->prepare( "AND spam = %d ", $args['spam'] );
     2518        }
    24692519
    2470         if ( isset( $args['deleted'] ) )
     2520        if ( isset( $args['deleted'] ) ) {
    24712521                $query .= $wpdb->prepare( "AND deleted = %d ", $args['deleted'] );
     2522        }
     2523
     2524        $order = ( 'desc' == strtolower( $args['order'] ) ) ? 'DESC' : 'ASC';
     2525
     2526        switch ( $args['orderby'] ) {
     2527                case 'ids':
     2528                        $orderby = "blog_id";
     2529                        break;
     2530                case 'domain':
     2531                case 'last_updated':
     2532                case 'registered':
     2533                        $orderby = $args['orderby'];
     2534                        break;
     2535                default:
     2536                        $orderby = "blog_id";
     2537                        break;
     2538        }
     2539        $query .= $wpdb->prepare( "ORDER BY %s %s", $orderby, $order );
    24722540
    24732541        if ( isset( $args['limit'] ) && $args['limit'] ) {
    2474                 if ( isset( $args['offset'] ) && $args['offset'] )
     2542                if ( isset( $args['offset'] ) && $args['offset'] ) {
    24752543                        $query .= $wpdb->prepare( "LIMIT %d , %d ", $args['offset'], $args['limit'] );
    2476                 else
     2544                } else {
    24772545                        $query .= $wpdb->prepare( "LIMIT %d ", $args['limit'] );
     2546                }
    24782547        }
    24792548
    24802549        $site_results = $wpdb->get_results( $query, ARRAY_A );