WordPress.org

Make WordPress Core

Ticket #32450: 32450.diff

File 32450.diff, 6.8 KB (added by jeremyfelt, 5 years ago)
  • src/wp-includes/class-wp-site.php

     
     1<?php
     2/**
     3 * Site API: WP_Site class
     4 *
     5 * @package WordPress
     6 * @subpackage Multisite
     7 * @since 4.5.0
     8 */
     9
     10/**
     11 * Core class used for interacting with a multisite site.
     12 *
     13 * This class is used during load to populate the `$current_blog` global and
     14 * setup the current site.
     15 *
     16 * @since 4.5.0
     17 */
     18class WP_Site {
     19
     20        /**
     21         * Site ID.
     22         *
     23         * @since 4.5.0
     24         * @access public
     25         * @var int
     26         */
     27        public $blog_id;
     28
     29        /**
     30         * Domain of the site.
     31         *
     32         * @since 4.5.0
     33         * @access public
     34         * @var string
     35         */
     36        public $domain = '';
     37
     38        /**
     39         * Path of the site.
     40         *
     41         * @since 4.5.0
     42         * @access public
     43         * @var string
     44         */
     45        public $path = '';
     46
     47        /**
     48         * The ID of the site's parent network.
     49         *
     50         * Named "site" vs. "network" for legacy reasons. An individual site's "site" is
     51         * its network.
     52         *
     53         * @since 4.5.0
     54         * @access public
     55         * @var int
     56         */
     57        public $site_id = 0;
     58
     59        /**
     60         * The date on which the site was created or registered.
     61         *
     62         * @since 4.5.0
     63         * @access public
     64         * @var string Date in MySQL's datetime format.
     65         */
     66        public $registered = '0000-00-00 00:00:00';
     67
     68        /**
     69         * The date and time on which site settings were last updated.
     70         *
     71         * @since 4.5.0
     72         * @access public
     73         * @var string Date in MySQL's datetime format.
     74         */
     75        public $last_updated = '0000-00-00 00:00:00';
     76
     77        /**
     78         * Whether the site should be treated as public.
     79         *
     80         * @since 4.5.0
     81         * @access public
     82         * @var int
     83         */
     84        public $public = 1;
     85
     86        /**
     87         * Whether the site should be treated as archived.
     88         *
     89         * @since 4.5.0
     90         * @access public
     91         * @var int
     92         */
     93        public $archived = 0;
     94
     95        /**
     96         * Whether the site should be treated as mature.
     97         *
     98         * Handling for this does not exist throughout WordPress core, but custom
     99         * implementations exist that require the property to be present.
     100         *
     101         * @since 4.5.0
     102         * @access public
     103         * @var int
     104         */
     105        public $mature = 0;
     106
     107        /**
     108         * Whether the site should be treated as spam.
     109         *
     110         * @since 4.5.0
     111         * @access public
     112         * @var int
     113         */
     114        public $spam = 0;
     115
     116        /**
     117         * Whether the site should be treated as deleted.
     118         *
     119         * @since 4.5.0
     120         * @access public
     121         * @var int
     122         */
     123        public $deleted = 0;
     124
     125        /**
     126         * The language pack associated with this site.
     127         *
     128         * @since 4.5.0
     129         * @access public
     130         * @var int
     131         */
     132        public $lang_id = 0;
     133
     134        /**
     135         * The name of the site.
     136         *
     137         * @since 4.5.0
     138         * @access public
     139         * @var string
     140         */
     141        public $blogname = '';
     142
     143        /**
     144         * The home URL of the site.
     145         *
     146         * @since 4.5.0
     147         * @access public
     148         * @var string
     149         */
     150        public $home = '';
     151
     152        /**
     153         * The site URL of the site.
     154         *
     155         * @since 4.5.0
     156         * @access public
     157         * @var string
     158         */
     159        public $siteurl = '';
     160
     161        /**
     162         * The number of posts published on this site.
     163         *
     164         * @since 4.5.0
     165         * @access public
     166         * @var int
     167         */
     168        public $post_count = 0;
     169
     170        /**
     171         * Retrieve a site from the database by its ID.
     172         *
     173         * @since 4.5.0
     174         * @access public
     175         *
     176         * @global wpdb $wpdb WordPress database abstraction object.
     177         *
     178         * @param int $site_id The ID of the site to retrieve.
     179         * @return WP_Site|bool The site's object if found. False if not.
     180         */
     181        public static function get_instance( $site_id ) {
     182                global $wpdb;
     183
     184                $site_id = (int) $site_id;
     185                if ( ! $site_id ) {
     186                        return false;
     187                }
     188
     189                $_site = wp_cache_get( $site_id, 'sites' );
     190
     191                if ( ! $_site ) {
     192                        $_site = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM {$wpdb->blogs} WHERE blog_id = %d LIMIT 1", $site_id ) );
     193
     194                        if ( empty( $_site ) || is_wp_error( $_site ) ) {
     195                                return false;
     196                        }
     197
     198                        wp_cache_add( $site_id, $_site, 'sites' );
     199                }
     200
     201                return new WP_Site( $_site );
     202        }
     203
     204        /**
     205         * Create a new WP_Site object.
     206         *
     207         * Will populate object properties from the object provided and assign other
     208         * default properties based on that information.
     209         *
     210         * @since 4.5.0
     211         * @access public
     212         *
     213         * @param WP_Site|object $site A site object.
     214         */
     215        public function __construct( $site ) {
     216                foreach( get_object_vars( $site ) as $key => $value ) {
     217                        $this->$key = $value;
     218                }
     219
     220                $this->_site_full_details();
     221        }
     222
     223        /**
     224         * Set the full details of the site when requested.
     225         *
     226         * This populates additional properties that are often requested but
     227         * not part of the official database schema.
     228         */
     229        private function _site_full_details() {
     230                if ( ! isset( $this->blog_id ) ) {
     231                        return;
     232                }
     233
     234                switch_to_blog( $this->blog_id );
     235                $this->blogname = get_option( 'blogname' );
     236                $this->siteurl = get_option( 'siteurl' );
     237                $this->post_count = get_option( 'post_count' );
     238                $this->home = get_option( 'home' );
     239                restore_current_blog();
     240        }
     241}
  • src/wp-includes/ms-blogs.php

     
    210210        }
    211211
    212212        if ( empty($details) ) {
    213                 $details = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->blogs WHERE blog_id = %d /* get_blog_details */", $blog_id ) );
     213                $details = WP_Site::get_instance( $blog_id );
    214214                if ( ! $details ) {
    215215                        // Set the full cache.
    216216                        wp_cache_set( $blog_id, -1, 'blog-details' );
     
    223223                return $details;
    224224        }
    225225
    226         switch_to_blog( $blog_id );
    227         $details->blogname   = get_option( 'blogname' );
    228         $details->siteurl    = get_option( 'siteurl' );
    229         $details->post_count = get_option( 'post_count' );
    230         $details->home       = get_option( 'home' );
    231         restore_current_blog();
     226        if ( ! $details instanceof WP_Site ) {
     227                $details = new WP_Site( $details );
     228        }
    232229
    233230        /**
    234231         * Filter a blog's details.
  • src/wp-includes/ms-load.php

     
    254254
    255255        if ( $site ) {
    256256                // @todo get_blog_details()
    257                 return $site;
     257                return new WP_Site( $site );
    258258        }
    259259
    260260        return false;
  • src/wp-includes/ms-settings.php

     
    1313/** WP_Network class */
    1414require_once( ABSPATH . WPINC . '/class-wp-network.php' );
    1515
     16/** WP_Site class */
     17require_once( ABSPATH . WPINC . '/class-wp-site.php' );
     18
    1619/** Multisite loader */
    1720require_once( ABSPATH . WPINC . '/ms-load.php' );
    1821
     
    221224        $current_site = new WP_Network( $current_site );
    222225}
    223226
     227if ( ! $current_blog instanceof WP_Site ) {
     228        $current_blog = new WP_Site( $current_blog );
     229}
     230
    224231// Define upload directory constants
    225232ms_upload_constants();