Completed
Push — master ( a7cd2a...eabd6c )
by Stephen
38:42
created

WP_Site::__construct()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %
Metric Value
dl 0
loc 5
rs 9.4285
cc 2
eloc 3
nc 2
nop 1
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
final class WP_Site {
19
20
	/**
21
	 * Site ID.
22
	 *
23
	 * A numeric string, for compatibility reasons.
24
	 *
25
	 * @since 4.5.0
26
	 * @access public
27
	 * @var string
28
	 */
29
	public $blog_id;
30
31
	/**
32
	 * Domain of the site.
33
	 *
34
	 * @since 4.5.0
35
	 * @access public
36
	 * @var string
37
	 */
38
	public $domain = '';
39
40
	/**
41
	 * Path of the site.
42
	 *
43
	 * @since 4.5.0
44
	 * @access public
45
	 * @var string
46
	 */
47
	public $path = '';
48
49
	/**
50
	 * The ID of the site's parent network.
51
	 *
52
	 * Named "site" vs. "network" for legacy reasons. An individual site's "site" is
53
	 * its network.
54
	 *
55
	 * A numeric string, for compatibility reasons.
56
	 *
57
	 * @since 4.5.0
58
	 * @access public
59
	 * @var string
60
	 */
61
	public $site_id = '0';
62
63
	/**
64
	 * The date on which the site was created or registered.
65
	 *
66
	 * @since 4.5.0
67
	 * @access public
68
	 * @var string Date in MySQL's datetime format.
69
	 */
70
	public $registered = '0000-00-00 00:00:00';
71
72
	/**
73
	 * The date and time on which site settings were last updated.
74
	 *
75
	 * @since 4.5.0
76
	 * @access public
77
	 * @var string Date in MySQL's datetime format.
78
	 */
79
	public $last_updated = '0000-00-00 00:00:00';
80
81
	/**
82
	 * Whether the site should be treated as public.
83
	 *
84
	 * A numeric string, for compatibility reasons.
85
	 *
86
	 * @since 4.5.0
87
	 * @access public
88
	 * @var string
89
	 */
90
	public $public = '1';
91
92
	/**
93
	 * Whether the site should be treated as archived.
94
	 *
95
	 * A numeric string, for compatibility reasons.
96
	 *
97
	 * @since 4.5.0
98
	 * @access public
99
	 * @var string
100
	 */
101
	public $archived = '0';
102
103
	/**
104
	 * Whether the site should be treated as mature.
105
	 *
106
	 * Handling for this does not exist throughout WordPress core, but custom
107
	 * implementations exist that require the property to be present.
108
	 *
109
	 * A numeric string, for compatibility reasons.
110
	 *
111
	 * @since 4.5.0
112
	 * @access public
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
	 * @access public
124
	 * @var string
125
	 */
126
	public $spam = '0';
127
128
	/**
129
	 * Whether the site should be treated as deleted.
130
	 *
131
	 * A numeric string, for compatibility reasons.
132
	 *
133
	 * @since 4.5.0
134
	 * @access public
135
	 * @var string
136
	 */
137
	public $deleted = '0';
138
139
	/**
140
	 * The language pack associated with this site.
141
	 *
142
	 * A numeric string, for compatibility reasons.
143
	 *
144
	 * @since 4.5.0
145
	 * @access public
146
	 * @var string
147
	 */
148
	public $lang_id = '0';
149
150
	/**
151
	 * Retrieves a site from the database by its ID.
152
	 *
153
	 * @static
154
	 * @since 4.5.0
155
	 * @access public
156
	 *
157
	 * @global wpdb $wpdb WordPress database abstraction object.
158
	 *
159
	 * @param int $site_id The ID of the site to retrieve.
160
	 * @return WP_Site|false The site's object if found. False if not.
161
	 */
162 View Code Duplication
	public static function get_instance( $site_id ) {
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
163
		global $wpdb;
164
165
		$site_id = (int) $site_id;
166
		if ( ! $site_id ) {
167
			return false;
168
		}
169
170
		$_site = wp_cache_get( $site_id, 'sites' );
171
172
		if ( ! $_site ) {
173
			$_site = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM {$wpdb->blogs} WHERE blog_id = %d LIMIT 1", $site_id ) );
174
175
			if ( empty( $_site ) || is_wp_error( $_site ) ) {
176
				return false;
177
			}
178
179
			wp_cache_add( $site_id, $_site, 'sites' );
180
		}
181
182
		return new WP_Site( $_site );
183
	}
184
185
	/**
186
	 * Creates a new WP_Site object.
187
	 *
188
	 * Will populate object properties from the object provided and assign other
189
	 * default properties based on that information.
190
	 *
191
	 * @since 4.5.0
192
	 * @access public
193
	 *
194
	 * @param WP_Site|object $site A site object.
195
	 */
196
	public function __construct( $site ) {
197
		foreach( get_object_vars( $site ) as $key => $value ) {
198
			$this->$key = $value;
199
		}
200
	}
201
}
202