WordPress.org

Make WordPress Core

Ticket #14511: wp_get_sites.diff

File wp_get_sites.diff, 4.7 KB (added by transom, 10 years ago)

Add wp_get_sites to ms-functions.php

  • trunk/wp-includes/ms-functions.php

     
    158158                return false;
    159159}
    160160
     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 */
     169function 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
    161285function get_user_count() {
    162286        global $wpdb;
    163287