ru-se.com

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

class-wp-site.php (7428B)


      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  *
     18  * @property int    $id
     19  * @property int    $network_id
     20  * @property string $blogname
     21  * @property string $siteurl
     22  * @property int    $post_count
     23  * @property string $home
     24  */
     25 final class WP_Site {
     26 
     27 	/**
     28 	 * Site ID.
     29 	 *
     30 	 * Named "blog" vs. "site" for legacy reasons.
     31 	 *
     32 	 * A numeric string, for compatibility reasons.
     33 	 *
     34 	 * @since 4.5.0
     35 	 * @var string
     36 	 */
     37 	public $blog_id;
     38 
     39 	/**
     40 	 * Domain of the site.
     41 	 *
     42 	 * @since 4.5.0
     43 	 * @var string
     44 	 */
     45 	public $domain = '';
     46 
     47 	/**
     48 	 * Path of the site.
     49 	 *
     50 	 * @since 4.5.0
     51 	 * @var string
     52 	 */
     53 	public $path = '';
     54 
     55 	/**
     56 	 * The ID of the site's parent network.
     57 	 *
     58 	 * Named "site" vs. "network" for legacy reasons. An individual site's "site" is
     59 	 * its network.
     60 	 *
     61 	 * A numeric string, for compatibility reasons.
     62 	 *
     63 	 * @since 4.5.0
     64 	 * @var string
     65 	 */
     66 	public $site_id = '0';
     67 
     68 	/**
     69 	 * The date and time on which the site was created or registered.
     70 	 *
     71 	 * @since 4.5.0
     72 	 * @var string Date in MySQL's datetime format.
     73 	 */
     74 	public $registered = '0000-00-00 00:00:00';
     75 
     76 	/**
     77 	 * The date and time on which site settings were last updated.
     78 	 *
     79 	 * @since 4.5.0
     80 	 * @var string Date in MySQL's datetime format.
     81 	 */
     82 	public $last_updated = '0000-00-00 00:00:00';
     83 
     84 	/**
     85 	 * Whether the site should be treated as public.
     86 	 *
     87 	 * A numeric string, for compatibility reasons.
     88 	 *
     89 	 * @since 4.5.0
     90 	 * @var string
     91 	 */
     92 	public $public = '1';
     93 
     94 	/**
     95 	 * Whether the site should be treated as archived.
     96 	 *
     97 	 * A numeric string, for compatibility reasons.
     98 	 *
     99 	 * @since 4.5.0
    100 	 * @var string
    101 	 */
    102 	public $archived = '0';
    103 
    104 	/**
    105 	 * Whether the site should be treated as mature.
    106 	 *
    107 	 * Handling for this does not exist throughout WordPress core, but custom
    108 	 * implementations exist that require the property to be present.
    109 	 *
    110 	 * A numeric string, for compatibility reasons.
    111 	 *
    112 	 * @since 4.5.0
    113 	 * @var string
    114 	 */
    115 	public $mature = '0';
    116 
    117 	/**
    118 	 * Whether the site should be treated as spam.
    119 	 *
    120 	 * A numeric string, for compatibility reasons.
    121 	 *
    122 	 * @since 4.5.0
    123 	 * @var string
    124 	 */
    125 	public $spam = '0';
    126 
    127 	/**
    128 	 * Whether the site should be treated as deleted.
    129 	 *
    130 	 * A numeric string, for compatibility reasons.
    131 	 *
    132 	 * @since 4.5.0
    133 	 * @var string
    134 	 */
    135 	public $deleted = '0';
    136 
    137 	/**
    138 	 * The language pack associated with this site.
    139 	 *
    140 	 * A numeric string, for compatibility reasons.
    141 	 *
    142 	 * @since 4.5.0
    143 	 * @var string
    144 	 */
    145 	public $lang_id = '0';
    146 
    147 	/**
    148 	 * Retrieves a site from the database by its ID.
    149 	 *
    150 	 * @since 4.5.0
    151 	 *
    152 	 * @global wpdb $wpdb WordPress database abstraction object.
    153 	 *
    154 	 * @param int $site_id The ID of the site to retrieve.
    155 	 * @return WP_Site|false The site's object if found. False if not.
    156 	 */
    157 	public static function get_instance( $site_id ) {
    158 		global $wpdb;
    159 
    160 		$site_id = (int) $site_id;
    161 		if ( ! $site_id ) {
    162 			return false;
    163 		}
    164 
    165 		$_site = wp_cache_get( $site_id, 'sites' );
    166 
    167 		if ( false === $_site ) {
    168 			$_site = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM {$wpdb->blogs} WHERE blog_id = %d LIMIT 1", $site_id ) );
    169 
    170 			if ( empty( $_site ) || is_wp_error( $_site ) ) {
    171 				$_site = -1;
    172 			}
    173 
    174 			wp_cache_add( $site_id, $_site, 'sites' );
    175 		}
    176 
    177 		if ( is_numeric( $_site ) ) {
    178 			return false;
    179 		}
    180 
    181 		return new WP_Site( $_site );
    182 	}
    183 
    184 	/**
    185 	 * Creates a new WP_Site object.
    186 	 *
    187 	 * Will populate object properties from the object provided and assign other
    188 	 * default properties based on that information.
    189 	 *
    190 	 * @since 4.5.0
    191 	 *
    192 	 * @param WP_Site|object $site A site object.
    193 	 */
    194 	public function __construct( $site ) {
    195 		foreach ( get_object_vars( $site ) as $key => $value ) {
    196 			$this->$key = $value;
    197 		}
    198 	}
    199 
    200 	/**
    201 	 * Converts an object to array.
    202 	 *
    203 	 * @since 4.6.0
    204 	 *
    205 	 * @return array Object as array.
    206 	 */
    207 	public function to_array() {
    208 		return get_object_vars( $this );
    209 	}
    210 
    211 	/**
    212 	 * Getter.
    213 	 *
    214 	 * Allows current multisite naming conventions when getting properties.
    215 	 * Allows access to extended site properties.
    216 	 *
    217 	 * @since 4.6.0
    218 	 *
    219 	 * @param string $key Property to get.
    220 	 * @return mixed Value of the property. Null if not available.
    221 	 */
    222 	public function __get( $key ) {
    223 		switch ( $key ) {
    224 			case 'id':
    225 				return (int) $this->blog_id;
    226 			case 'network_id':
    227 				return (int) $this->site_id;
    228 			case 'blogname':
    229 			case 'siteurl':
    230 			case 'post_count':
    231 			case 'home':
    232 			default: // Custom properties added by 'site_details' filter.
    233 				if ( ! did_action( 'ms_loaded' ) ) {
    234 					return null;
    235 				}
    236 
    237 				$details = $this->get_details();
    238 				if ( isset( $details->$key ) ) {
    239 					return $details->$key;
    240 				}
    241 		}
    242 
    243 		return null;
    244 	}
    245 
    246 	/**
    247 	 * Isset-er.
    248 	 *
    249 	 * Allows current multisite naming conventions when checking for properties.
    250 	 * Checks for extended site properties.
    251 	 *
    252 	 * @since 4.6.0
    253 	 *
    254 	 * @param string $key Property to check if set.
    255 	 * @return bool Whether the property is set.
    256 	 */
    257 	public function __isset( $key ) {
    258 		switch ( $key ) {
    259 			case 'id':
    260 			case 'network_id':
    261 				return true;
    262 			case 'blogname':
    263 			case 'siteurl':
    264 			case 'post_count':
    265 			case 'home':
    266 				if ( ! did_action( 'ms_loaded' ) ) {
    267 					return false;
    268 				}
    269 				return true;
    270 			default: // Custom properties added by 'site_details' filter.
    271 				if ( ! did_action( 'ms_loaded' ) ) {
    272 					return false;
    273 				}
    274 
    275 				$details = $this->get_details();
    276 				if ( isset( $details->$key ) ) {
    277 					return true;
    278 				}
    279 		}
    280 
    281 		return false;
    282 	}
    283 
    284 	/**
    285 	 * Setter.
    286 	 *
    287 	 * Allows current multisite naming conventions while setting properties.
    288 	 *
    289 	 * @since 4.6.0
    290 	 *
    291 	 * @param string $key   Property to set.
    292 	 * @param mixed  $value Value to assign to the property.
    293 	 */
    294 	public function __set( $key, $value ) {
    295 		switch ( $key ) {
    296 			case 'id':
    297 				$this->blog_id = (string) $value;
    298 				break;
    299 			case 'network_id':
    300 				$this->site_id = (string) $value;
    301 				break;
    302 			default:
    303 				$this->$key = $value;
    304 		}
    305 	}
    306 
    307 	/**
    308 	 * Retrieves the details for this site.
    309 	 *
    310 	 * This method is used internally to lazy-load the extended properties of a site.
    311 	 *
    312 	 * @since 4.6.0
    313 	 *
    314 	 * @see WP_Site::__get()
    315 	 *
    316 	 * @return stdClass A raw site object with all details included.
    317 	 */
    318 	private function get_details() {
    319 		$details = wp_cache_get( $this->blog_id, 'site-details' );
    320 
    321 		if ( false === $details ) {
    322 
    323 			switch_to_blog( $this->blog_id );
    324 			// Create a raw copy of the object for backward compatibility with the filter below.
    325 			$details = new stdClass();
    326 			foreach ( get_object_vars( $this ) as $key => $value ) {
    327 				$details->$key = $value;
    328 			}
    329 			$details->blogname   = get_option( 'blogname' );
    330 			$details->siteurl    = get_option( 'siteurl' );
    331 			$details->post_count = get_option( 'post_count' );
    332 			$details->home       = get_option( 'home' );
    333 			restore_current_blog();
    334 
    335 			wp_cache_set( $this->blog_id, $details, 'site-details' );
    336 		}
    337 
    338 		/** This filter is documented in wp-includes/ms-blogs.php */
    339 		$details = apply_filters_deprecated( 'blog_details', array( $details ), '4.7.0', 'site_details' );
    340 
    341 		/**
    342 		 * Filters a site's extended properties.
    343 		 *
    344 		 * @since 4.6.0
    345 		 *
    346 		 * @param stdClass $details The site details.
    347 		 */
    348 		$details = apply_filters( 'site_details', $details );
    349 
    350 		return $details;
    351 	}
    352 }