| | 161 | /** |
| | 162 | * Return a list of sites for the current network |
| | 163 | * |
| | 164 | * @since 3.1.0 |
| | 165 | * |
| | 166 | * @param array|string $args Optional. Override default arguments. |
| | 167 | * @return array site list and values |
| | 168 | */ |
| | 169 | function wp_get_sites($args=array()){ |
| | 170 | // replacement for wp-includes/ms-deprecated.php#get_blog_list |
| | 171 | // see wp-admin/ms-sites.php#352 |
| | 172 | // also wp-includes/ms-functions.php#get_blogs_of_user |
| | 173 | // also wp-includes/post-template.php#wp_list_pages |
| | 174 | global $wpdb; |
| | 175 | |
| | 176 | $defaults = array( |
| | 177 | 'include_id' =>'', // includes only these sites in the results, comma-delimited |
| | 178 | 'exclude_id' =>'', // excludes these sites from the results, comma-delimted |
| | 179 | 'blogname_like' =>'', // domain or path is like this value |
| | 180 | 'ip_like' =>'', // Match IP address |
| | 181 | 'reg_date_since' =>'', // sites registered since (accepts pretty much any valid date like tomorrow, today, 5/12/2009, etc.) |
| | 182 | 'reg_date_before' =>'', // sites registered before |
| | 183 | 'include_user_id' =>'', // only sites owned by these users, comma-delimited |
| | 184 | 'exclude_user_id' =>'', // don't include sites owned by these users, comma-delimited |
| | 185 | 'include_spam' => false, // Include sites marked as "spam" |
| | 186 | 'include_deleted' => false, // Include deleted sites |
| | 187 | 'include_archived' => false, // Include archived sites |
| | 188 | 'include_mature' => false, // Included blogs marked as mature |
| | 189 | 'public_only' => true, // Include only blogs marked as public |
| | 190 | 'sort_column' => 'registered',// or registered, last_updated, blogname, site_id. |
| | 191 | 'order' => 'asc', // or desc |
| | 192 | 'limit_results' => '', // return this many results |
| | 193 | 'start' => '', // return results starting with this item |
| | 194 | ); |
| | 195 | if( !function_exists('make_email_list_by_user_id')){ |
| | 196 | function make_email_list_by_user_id($user_ids){ |
| | 197 | $the_users = explode(',',$user_ids); |
| | 198 | $the_emails = array(); |
| | 199 | foreach( (array) $the_users as $user_id){ |
| | 200 | $the_user = get_userdata($user_id); |
| | 201 | $the_emails[] = $the_user->user_email; |
| | 202 | } |
| | 203 | return $the_emails; |
| | 204 | } |
| | 205 | } |
| | 206 | |
| | 207 | // array_merge |
| | 208 | $r = wp_parse_args( $args, $defaults ); |
| | 209 | extract( $r, EXTR_SKIP ); |
| | 210 | |
| | 211 | $query = "SELECT * FROM {$wpdb->blogs} as b "; |
| | 212 | $query .= "LEFT JOIN {$wpdb->registration_log} as l ON b.`blog_id` = l.`blog_id` "; |
| | 213 | $query .= "WHERE b.`site_id` = '{$wpdb->site_id}' "; |
| | 214 | |
| | 215 | if ( !empty($include_id) ) { |
| | 216 | $list = implode("','", explode(',', $include_id)); |
| | 217 | $query .= " AND b.blog_id IN ('{$list}') "; |
| | 218 | } |
| | 219 | if ( !empty($exclude_id) ) { |
| | 220 | $list = implode("','", explode(',', $exclude_id)); |
| | 221 | $query .= " AND b.blog_id NOT IN ('{$list}') "; |
| | 222 | } |
| | 223 | if ( !empty($blogname_like) ) { |
| | 224 | $query .= " AND ( b.domain LIKE '%".$blogname_like."%' OR b.path LIKE '%".$blogname_like."%' ) "; |
| | 225 | } |
| | 226 | if ( !empty($ip_like) ) { |
| | 227 | $query .= " AND l.IP LIKE '%".$ip_like."%' "; |
| | 228 | } |
| | 229 | if( !empty($reg_date_since) ){ |
| | 230 | $query .= " AND unix_timestamp(b.date_registered) > '".strtotime($reg_date_since)."' "; |
| | 231 | } |
| | 232 | if( !empty($reg_date_before) ){ |
| | 233 | $query .= " AND unix_timestamp(b.date_registered) < '".strtotime($reg_date_before)."' "; |
| | 234 | } |
| | 235 | if ( !empty($include_user_id) ) { |
| | 236 | $the_emails = make_email_list_by_user_id($include_user_id); |
| | 237 | $list = implode("','", $the_emails); |
| | 238 | $query .= " AND l.email IN ('{$list}') "; |
| | 239 | } |
| | 240 | if ( !empty($exclude_user_id) ) { |
| | 241 | $the_emails = make_email_list_by_user_id($include_user_id); |
| | 242 | $list = implode("','", $the_emails); |
| | 243 | $query .= " AND l.email NOT IN ('{$list}') "; |
| | 244 | } |
| | 245 | if ( !empty($ip_like) ) { |
| | 246 | $query .= " AND l.IP LIKE ('%".$ip_like."%') "; |
| | 247 | } |
| | 248 | |
| | 249 | $query .= " AND b.public = ". (($public_only) ? "'1'" : "'0'"); |
| | 250 | $query .= " AND b.archived = ". (($include_archived) ? "'1'" : "'0'"); |
| | 251 | $query .= " AND b.mature = ". (($include_mature) ? "'1'" : "'0'"); |
| | 252 | $query .= " AND b.spam = ". (($include_spam) ? "'1'" : "'0'"); |
| | 253 | $query .= " AND b.deleted = ". (($include_deleted) ? "'1'" : "'0'"); |
| | 254 | |
| | 255 | if ( $sort_column == 'site_id' ) { |
| | 256 | $query .= ' ORDER BY b.`blog_id` '; |
| | 257 | } elseif ( $sort_column == 'lastupdated' ) { |
| | 258 | $query .= ' ORDER BY b.`last_updated` '; |
| | 259 | } elseif ( $sort_column == 'blogname' ) { |
| | 260 | $query .= ' ORDER BY b.`domain` '; |
| | 261 | } else { |
| | 262 | $sort_column = 'registered'; |
| | 263 | $query .= " ORDER BY b.`registered` "; |
| | 264 | } |
| | 265 | |
| | 266 | $order = ( 'desc' == $order ) ? "DESC" : "ASC"; |
| | 267 | $query .= $order; |
| | 268 | |
| | 269 | $limit = ''; |
| | 270 | if( !empty($limit_results) ){ |
| | 271 | if( !empty($start) ){ |
| | 272 | $limit = $start." , "; |
| | 273 | } |
| | 274 | $query .= "LIMIT ".$limit.$limit_results; |
| | 275 | } |
| | 276 | |
| | 277 | $sql = $wpdb->prepare($query); |
| | 278 | |
| | 279 | $results = $wpdb->get_results($sql, ARRAY_A); |
| | 280 | |
| | 281 | return $results; |
| | 282 | } |
| | 283 | |
| | 284 | |