| 1 | <?php
|
|---|
| 2 | /**
|
|---|
| 3 | * Return a list of sites for the current network
|
|---|
| 4 | *
|
|---|
| 5 | * @since 3.1.0
|
|---|
| 6 | *
|
|---|
| 7 | * @param array|string $args Optional. Override default arguments.
|
|---|
| 8 | * @return array site list and values
|
|---|
| 9 | */
|
|---|
| 10 | function wp_get_sites($args){
|
|---|
| 11 | // replacement for wp-includes/ms-deprecated.php#get_blog_list
|
|---|
| 12 | // see wp-admin/ms-sites.php#352
|
|---|
| 13 | // also wp-includes/ms-functions.php#get_blogs_of_user
|
|---|
| 14 | // also wp-includes/post-template.php#wp_list_pages
|
|---|
| 15 | global $wpdb;
|
|---|
| 16 |
|
|---|
| 17 | $defaults = array(
|
|---|
| 18 | 'include_id' , // includes only these sites in the results, comma-delimited
|
|---|
| 19 | 'exclude_id' , // excludes these sites from the results, comma-delimted
|
|---|
| 20 | 'blogname_like' , // domain or path is like this value
|
|---|
| 21 | 'ip_like' , // Match IP address
|
|---|
| 22 | 'reg_date_since' , // sites registered since (accepts pretty much any valid date like tomorrow, today, 5/12/2009, etc.)
|
|---|
| 23 | 'reg_date_before' , // sites registered before
|
|---|
| 24 | 'include_user_id' , // only sites owned by these users, comma-delimited
|
|---|
| 25 | 'exclude_user_id' , // don't include sites owned by these users, comma-delimited
|
|---|
| 26 | 'include_spam' => false, // Include sites marked as "spam"
|
|---|
| 27 | 'include_deleted' => false, // Include deleted sites
|
|---|
| 28 | 'include_archived' => false, // Include archived sites
|
|---|
| 29 | 'include_mature' => false, // Included blogs marked as mature
|
|---|
| 30 | 'public_only' => true, // Include only blogs marked as public
|
|---|
| 31 | 'sort_column' => 'registered',// or registered, last_updated, blogname, site_id
|
|---|
| 32 | 'order' => 'asc', // or desc
|
|---|
| 33 | 'limit_results' , // return this many results
|
|---|
| 34 | 'start' , // return results starting with this item
|
|---|
| 35 | );
|
|---|
| 36 | function make_email_list_by_user_id($user_ids){
|
|---|
| 37 | $the_users = explode(',',$user_ids);
|
|---|
| 38 | $the_emails = array();
|
|---|
| 39 | foreach( (array) $the_users as $user_id){
|
|---|
| 40 | $the_user = get_userdata($user_id);
|
|---|
| 41 | $the_emails[] = $the_user->user_email;
|
|---|
| 42 | }
|
|---|
| 43 | return $the_emails;
|
|---|
| 44 | }
|
|---|
| 45 |
|
|---|
| 46 |
|
|---|
| 47 | // array_merge
|
|---|
| 48 | $r = wp_parse_args( $args, $defaults );
|
|---|
| 49 | extract( $r, EXTR_SKIP );
|
|---|
| 50 |
|
|---|
| 51 | $query = "SELECT * FROM {$wpdb->blogs}, {$wpdb->registration_log} WHERE site_id = '{$wpdb->siteid}' AND {$wpdb->blogs}.blog_id = {$wpdb->registration_log}.blog_id ";
|
|---|
| 52 |
|
|---|
| 53 | if ( isset($include_id) ) {
|
|---|
| 54 | $list = implode("','", explode(',', $include_id));
|
|---|
| 55 | $query .= " AND {$wpdb->blogs}.blog_id IN ('{$list}') ";
|
|---|
| 56 | }
|
|---|
| 57 | if ( isset($exclude_id) ) {
|
|---|
| 58 | $list = implode("','", explode(',', $exclude_id));
|
|---|
| 59 | $query .= " AND {$wpdb->blogs}.blog_id NOT IN ('{$list}') ";
|
|---|
| 60 | }
|
|---|
| 61 | if ( isset($blogname_like) ) {
|
|---|
| 62 | $query .= " AND ( {$wpdb->blogs}.domain LIKE '%".$blogname_like."%' OR {$wpdb->blogs}.path LIKE '%".$blogname_like."%' ) ";
|
|---|
| 63 | }
|
|---|
| 64 | if ( isset($ip_like) ) {
|
|---|
| 65 | $query .= " AND {$wpdb->registration_log}.IP LIKE '%".$ip_like."%' ";
|
|---|
| 66 | }
|
|---|
| 67 | if( isset($reg_date_since) ){
|
|---|
| 68 | $query .= " AND unix_timestamp({$wpdb->registration_log}.date_registered) > '".strtotime($reg_date_since)."' ";
|
|---|
| 69 | }
|
|---|
| 70 | if( isset($reg_date_before) ){
|
|---|
| 71 | $query .= " AND unix_timestamp({$wpdb->registration_log}.date_registered) < '".strtotime($reg_date_before)."' ";
|
|---|
| 72 | }
|
|---|
| 73 | if ( isset($include_user_id) ) {
|
|---|
| 74 | $the_emails = make_email_list_by_user_id($include_user_id);
|
|---|
| 75 | $list = implode("','", $the_emails);
|
|---|
| 76 | $query .= " AND {$wpdb->registration_log}.email IN ('{$list}') ";
|
|---|
| 77 | }
|
|---|
| 78 | if ( isset($exclude_user_id) ) {
|
|---|
| 79 | $the_emails = make_email_list_by_user_id($include_user_id);
|
|---|
| 80 | $list = implode("','", $the_emails);
|
|---|
| 81 | $query .= " AND {$wpdb->registration_log}.email NOT IN ('{$list}') ";
|
|---|
| 82 | }
|
|---|
| 83 | if ( isset($ip_like) ) {
|
|---|
| 84 | $query .= " AND {$wpdb->registration_log}.IP LIKE ('%".$ip_like."%') ";
|
|---|
| 85 | }
|
|---|
| 86 |
|
|---|
| 87 | $query .= " AND {$wpdb->blogs}.public = ". (($public_only) ? "'1'" : "'0'");
|
|---|
| 88 | $query .= " AND {$wpdb->blogs}.archived = ". (($include_archived) ? "'1'" : "'0'");
|
|---|
| 89 | $query .= " AND {$wpdb->blogs}.mature = ". (($include_mature) ? "'1'" : "'0'");
|
|---|
| 90 | $query .= " AND {$wpdb->blogs}.spam = ". (($include_spam) ? "'1'" : "'0'");
|
|---|
| 91 | $query .= " AND {$wpdb->blogs}.deleted = ". (($include_deleted) ? "'1'" : "'0'");
|
|---|
| 92 |
|
|---|
| 93 | if ( $sort_column == 'site_id' ) {
|
|---|
| 94 | $query .= ' ORDER BY {$wpdb->blogs}.blog_id ';
|
|---|
| 95 | } elseif ( $sort_column == 'lastupdated' ) {
|
|---|
| 96 | $query .= ' ORDER BY last_updated ';
|
|---|
| 97 | } elseif ( $sort_column == 'blogname' ) {
|
|---|
| 98 | $query .= ' ORDER BY domain ';
|
|---|
| 99 | } else {
|
|---|
| 100 | $sort_column = 'registered';
|
|---|
| 101 | $query .= " ORDER BY {$wpdb->blogs}.registered ";
|
|---|
| 102 | }
|
|---|
| 103 |
|
|---|
| 104 | $order = ( 'desc' == $order ) ? "DESC" : "ASC";
|
|---|
| 105 | $query .= $order;
|
|---|
| 106 |
|
|---|
| 107 | $limit = '';
|
|---|
| 108 | if( isset($limit_results) ){
|
|---|
| 109 | if( isset($start) ){
|
|---|
| 110 | $limit = $start." , ";
|
|---|
| 111 | }
|
|---|
| 112 | $query .= "LIMIT ".$limit.$limit_results;
|
|---|
| 113 | }
|
|---|
| 114 |
|
|---|
| 115 | $sql = $wpdb->prepare($query);
|
|---|
| 116 |
|
|---|
| 117 | $results = $wpdb->get_results($sql, ARRAY_A);
|
|---|
| 118 |
|
|---|
| 119 | return $results;
|
|---|
| 120 | }
|
|---|