Skip to:
Content

BuddyPress.org

Changeset 2536


Ignore:
Timestamp:
02/02/2010 03:31:49 PM (15 years ago)
Author:
apeatling
Message:

Major performance improvements to blog listings.

Location:
trunk/bp-blogs
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/bp-blogs/bp-blogs-classes.php

    r2394 r2536  
    7070    /* Static Functions */
    7171
     72    function get( $type, $limit = false, $page = false, $user_id = false, $search_terms = false ) {
     73        global $bp, $wpdb;
     74
     75        if ( !$bp->blogs )
     76            bp_blogs_setup_globals();
     77
     78        if ( !is_user_logged_in() || ( !is_site_admin() && ( $user_id != $bp->loggedin_user->id ) ) )
     79            $hidden_sql = "AND wb.public = 1";
     80
     81        if ( $limit && $page )
     82            $pag_sql = $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) );
     83
     84        if ( $user_id )
     85            $user_sql = $wpdb->prepare( " AND b.user_id = %d", $user_id );
     86
     87        switch ( $type ) {
     88            case 'active': default:
     89                $order_sql = "ORDER BY CONVERT(bm.meta_value, SIGNED) DESC";
     90                break;
     91            case 'alphabetical':
     92                $order_sql = "ORDER BY bm2.meta_value ASC";
     93                break;
     94            case 'newest':
     95                $order_sql = "ORDER BY wb.registered DESC";
     96                break;
     97            case 'random':
     98                $order_sql = "ORDER BY RAND()";
     99                break;
     100        }
     101
     102        if ( !empty( $search_terms ) ) {
     103            $filter = like_escape( $wpdb->escape( $search_terms ) );
     104            $paged_blogs = $wpdb->get_results( $wpdb->prepare( "SELECT b.blog_id, b.user_id as admin_user_id, u.user_email as admin_user_email, wb.domain, wb.path, bm.meta_value as last_activity, bm2.meta_value as name, bm3.meta_value as description FROM {$bp->blogs->table_name} b, {$bp->blogs->table_name_blogmeta} bm, {$bp->blogs->table_name_blogmeta} bm2, {$bp->blogs->table_name_blogmeta} bm3, {$wpdb->base_prefix}blogs wb, {$wpdb->users} u WHERE b.blog_id = wb.blog_id AND b.user_id = u.ID AND b.blog_id = bm.blog_id AND b.blog_id = bm2.blog_id AND b.blog_id = bm3.blog_id AND wb.archived = '0' AND wb.spam = 0 AND wb.mature = 0 AND wb.deleted = 0 {$hidden_sql} AND bm.meta_key = 'last_activity' AND bm2.meta_key = 'name' AND bm3.meta_key = 'description' AND ( bm2.meta_value LIKE '%%$filter%%' || bm3.meta_value LIKE '%%$filter%%' ) {$user_sql} {$order_sql} {$pag_sql}" ) );
     105            $total_blogs = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(DISTINCT b.blog_id) FROM {$bp->blogs->table_name} b, {$wpdb->base_prefix}blogs wb, {$bp->blogs->table_name_blogmeta} bm, {$bp->blogs->table_name_blogmeta} bm2 WHERE b.blog_id = wb.blog_id AND bm.blog_id = b.blog_id AND bm2.blog_id = b.blog_id AND wb.archived = '0' AND wb.spam = 0 AND wb.mature = 0 AND wb.deleted = 0 {$hidden_sql} AND bm.meta_key = 'name' AND bm2.meta_key = 'description' AND ( bm.meta_value LIKE '%%$filter%%' || bm2.meta_value LIKE '%%$filter%%' ) {$user_sql}" ) );
     106        } else {
     107            $paged_blogs = $wpdb->get_results( $wpdb->prepare( "SELECT b.blog_id, b.user_id as admin_user_id, u.user_email as admin_user_email, wb.domain, wb.path, bm.meta_value as last_activity, bm2.meta_value as name, bm3.meta_value as description FROM {$bp->blogs->table_name} b, {$bp->blogs->table_name_blogmeta} bm, {$bp->blogs->table_name_blogmeta} bm2, {$bp->blogs->table_name_blogmeta} bm3, {$wpdb->base_prefix}blogs wb, {$wpdb->users} u WHERE b.blog_id = wb.blog_id AND b.user_id = u.ID AND b.blog_id = bm.blog_id AND b.blog_id = bm2.blog_id AND b.blog_id = bm3.blog_id {$user_sql} AND wb.archived = '0' AND wb.spam = 0 AND wb.mature = 0 AND wb.deleted = 0 {$hidden_sql} AND bm.meta_key = 'last_activity' AND bm2.meta_key = 'name' AND bm3.meta_key = 'description' {$order_sql} {$pag_sql}" ) );
     108            $total_blogs = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(DISTINCT b.blog_id) FROM {$bp->blogs->table_name} b, {$wpdb->base_prefix}blogs wb WHERE b.blog_id = wb.blog_id {$user_sql} AND wb.archived = '0' AND wb.spam = 0 AND wb.mature = 0 AND wb.deleted = 0 {$hidden_sql}" ) );
     109        }
     110
     111        foreach ( $paged_blogs as $blog ) $blog_ids[] = $blog->blog_id;
     112        $blog_ids = $wpdb->escape( join( ',', (array)$blog_ids ) );
     113        $paged_blogs = BP_Blogs_Blog::get_blog_extras( &$paged_blogs, $blog_ids, $type );
     114
     115        return array( 'blogs' => $paged_blogs, 'total' => $total_blogs );
     116    }
     117
    72118    function delete_blog_for_all( $blog_id ) {
    73119        global $wpdb, $bp;
     
    170216    }
    171217
    172     function get_all( $limit = null, $page = null ) {
    173         global $bp, $wpdb;
    174 
    175         if ( !$bp->blogs )
    176             bp_blogs_setup_globals();
     218    function search_blogs( $filter, $limit = null, $page = null ) {
     219        global $wpdb, $bp;
     220
     221        if ( !$bp->blogs )
     222            bp_blogs_setup_globals();
     223
     224        $filter = like_escape( $wpdb->escape( $filter ) );
    177225
    178226        if ( !is_site_admin() )
     
    182230            $pag_sql = $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) );
    183231
     232        $paged_blogs = $wpdb->get_results( "SELECT DISTINCT bm.blog_id FROM {$bp->blogs->table_name_blogmeta} bm LEFT JOIN {$wpdb->base_prefix}blogs wb ON bm.blog_id = wb.blog_id WHERE ( ( bm.meta_key = 'name' OR bm.meta_key = 'description' ) AND bm.meta_value LIKE '%%$filter%%' ) {$hidden_sql} AND wb.mature = 0 AND wb.spam = 0 AND wb.archived = '0' AND wb.deleted = 0 ORDER BY meta_value ASC{$pag_sql}" );
     233        $total_blogs = $wpdb->get_var( "SELECT COUNT(DISTINCT bm.blog_id) FROM {$bp->blogs->table_name_blogmeta} bm LEFT JOIN {$wpdb->base_prefix}blogs wb ON bm.blog_id = wb.blog_id WHERE ( ( bm.meta_key = 'name' OR bm.meta_key = 'description' ) AND bm.meta_value LIKE '%%$filter%%' ) {$hidden_sql} AND wb.mature = 0 AND wb.spam = 0 AND wb.archived = '0' AND wb.deleted = 0 ORDER BY meta_value ASC" );
     234
     235        return array( 'blogs' => $paged_blogs, 'total' => $total_blogs );
     236    }
     237
     238    function get_all( $limit = null, $page = null ) {
     239        global $bp, $wpdb;
     240
     241        if ( !$bp->blogs )
     242            bp_blogs_setup_globals();
     243
     244        if ( !is_site_admin() )
     245            $hidden_sql = "AND wb.public = 1";
     246
     247        if ( $limit && $page )
     248            $pag_sql = $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) );
     249
    184250        $paged_blogs = $wpdb->get_results( $wpdb->prepare( "SELECT DISTINCT b.blog_id FROM {$bp->blogs->table_name} b LEFT JOIN {$wpdb->base_prefix}blogs wb ON b.blog_id = wb.blog_id WHERE wb.mature = 0 AND wb.spam = 0 AND wb.archived = '0' AND wb.deleted = 0 {$hidden_sql} {$pag_sql}" ) );
    185251        $total_blogs = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(DISTINCT b.blog_id) FROM {$bp->blogs->table_name} b LEFT JOIN {$wpdb->base_prefix}blogs wb ON b.blog_id = wb.blog_id WHERE wb.mature = 0 AND wb.spam = 0 AND wb.archived = '0' AND wb.deleted = 0 {$hidden_sql}" ) );
     
    208274    }
    209275
    210     function search_blogs( $filter, $limit = null, $page = null ) {
    211         global $wpdb, $bp;
    212 
    213         if ( !$bp->blogs )
    214             bp_blogs_setup_globals();
    215 
    216         $filter = like_escape( $wpdb->escape( $filter ) );
    217 
    218         if ( !is_site_admin() )
    219             $hidden_sql = "AND wb.public = 1";
    220 
    221         if ( $limit && $page )
    222             $pag_sql = $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) );
    223 
    224         $paged_blogs = $wpdb->get_results( "SELECT DISTINCT bm.blog_id FROM {$bp->blogs->table_name_blogmeta} bm LEFT JOIN {$wpdb->base_prefix}blogs wb ON bm.blog_id = wb.blog_id WHERE ( ( bm.meta_key = 'name' OR bm.meta_key = 'description' ) AND bm.meta_value LIKE '%%$filter%%' ) {$hidden_sql} AND wb.mature = 0 AND wb.spam = 0 AND wb.archived = '0' AND wb.deleted = 0 ORDER BY meta_value ASC{$pag_sql}" );
    225         $total_blogs = $wpdb->get_var( "SELECT COUNT(DISTINCT bm.blog_id) FROM {$bp->blogs->table_name_blogmeta} bm LEFT JOIN {$wpdb->base_prefix}blogs wb ON bm.blog_id = wb.blog_id WHERE ( ( bm.meta_key = 'name' OR bm.meta_key = 'description' ) AND bm.meta_value LIKE '%%$filter%%' ) {$hidden_sql} AND wb.mature = 0 AND wb.spam = 0 AND wb.archived = '0' AND wb.deleted = 0 ORDER BY meta_value ASC" );
    226 
    227         return array( 'blogs' => $paged_blogs, 'total' => $total_blogs );
    228     }
    229 
    230     function get_random( $limit = null, $page = null, $user_id = false, $search_terms = false ) {
    231         global $bp, $wpdb;
    232 
    233         if ( !$bp->blogs )
    234             bp_blogs_setup_globals();
    235 
    236         if ( !is_user_logged_in() || ( !is_site_admin() && ( $user_id != $bp->loggedin_user->id ) ) )
    237             $hidden_sql = "AND wb.public = 1";
    238 
    239         if ( $limit && $page )
    240             $pag_sql = $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) );
    241 
    242         if ( $user_id ) {
    243             $blog_ids = $wpdb->escape( implode( ',', (array)BP_Blogs_Blog::get_blog_ids_for_user( $user_id) ) );
    244             $user_sql = $wpdb->prepare( " AND b.blog_id IN ( {$blog_ids} ) ");
    245         }
    246 
    247         $paged_blogs = $wpdb->get_results( $wpdb->prepare( "SELECT DISTINCT b.blog_id FROM {$bp->blogs->table_name} b LEFT JOIN {$wpdb->base_prefix}blogs wb ON b.blog_id = wb.blog_id WHERE wb.public = 1 AND wb.mature = 0 AND wb.spam = 0 AND wb.archived = '0' AND wb.deleted = 0 {$user_sql} ORDER BY rand() {$pag_sql}" ) );
    248         $total_blogs = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(DISTINCT b.blog_id) FROM {$bp->blogs->table_name} b LEFT JOIN {$wpdb->base_prefix}blogs wb ON b.blog_id = wb.blog_id WHERE wb.public = 1 AND wb.mature = 0 AND wb.spam = 0 AND wb.archived = '0' AND wb.deleted = 0 {$user_sql} ORDER BY rand()" ) );
    249 
    250         return array( 'blogs' => $paged_blogs, 'total' => $total_blogs );
    251     }
    252 
    253     function get_active( $limit = null, $page = null, $user_id = false, $search_terms = false ) {
    254         global $bp, $wpdb;
    255 
    256         if ( !$bp->blogs )
    257             bp_blogs_setup_globals();
    258 
    259         if ( !is_user_logged_in() || ( !is_site_admin() && ( $user_id != $bp->loggedin_user->id ) ) )
    260             $hidden_sql = "AND wb.public = 1";
    261 
    262         if ( $limit && $page )
    263             $pag_sql = $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) );
    264 
    265         if ( $user_id ) {
    266             $blog_ids = $wpdb->escape( implode( ',', (array)BP_Blogs_Blog::get_blog_ids_for_user( $user_id ) ) );
    267 
    268             if ( empty( $blog_ids ) )
    269                 return false;
    270             else
    271                 $user_sql = $wpdb->prepare( " AND b.blog_id IN ( {$blog_ids} ) " );
    272         }
    273 
    274         if ( !empty( $search_terms ) ) {
    275             $filter = like_escape( $wpdb->escape( $search_terms ) );
    276             $paged_blogs = $wpdb->get_results( $wpdb->prepare( "SELECT DISTINCT b.blog_id FROM {$bp->blogs->table_name} b, {$bp->blogs->table_name_blogmeta} bm, {$bp->blogs->table_name_blogmeta} bm2, {$wpdb->base_prefix}blogs wb WHERE b.blog_id = wb.blog_id AND b.blog_id = bm.blog_id AND b.blog_id = bm2.blog_id AND wb.archived = '0' AND wb.spam = 0 AND wb.mature = 0 AND wb.deleted = 0 {$hidden_sql} AND bm.meta_key = 'last_activity' AND ( ( bm2.meta_key = 'name' OR bm2.meta_key = 'description' ) AND bm2.meta_value LIKE '%%$filter%%' ) {$user_sql} ORDER BY CONVERT(bm.meta_value, SIGNED) DESC {$pag_sql}" ) );
    277             $total_blogs = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(DISTINCT bm.blog_id) FROM {$bp->blogs->table_name} b, {$bp->blogs->table_name_blogmeta} bm, {$bp->blogs->table_name_blogmeta} bm2, {$wpdb->base_prefix}blogs wb WHERE b.blog_id = wb.blog_id AND b.blog_id = bm.blog_id AND b.blog_id = bm2.blog_id AND wb.archived = '0' AND wb.spam = 0 AND wb.mature = 0 AND wb.deleted = 0 {$hidden_sql} AND bm.meta_key = 'last_activity' AND ( ( bm2.meta_key = 'name' OR bm2.meta_key = 'description' ) AND bm2.meta_value LIKE '%%$filter%%' ) {$user_sql} ORDER BY CONVERT(bm.meta_value, SIGNED) DESC" ) );
    278         } else {
    279             $paged_blogs = $wpdb->get_results( $wpdb->prepare( "SELECT DISTINCT b.blog_id FROM {$bp->blogs->table_name} b, {$bp->blogs->table_name_blogmeta} bm, {$wpdb->base_prefix}blogs wb WHERE b.blog_id = wb.blog_id AND b.blog_id = bm.blog_id AND wb.archived = '0' AND wb.spam = 0 AND wb.mature = 0 AND wb.deleted = 0 {$hidden_sql} AND bm.meta_key = 'last_activity' {$user_sql} ORDER BY CONVERT(bm.meta_value, SIGNED) DESC {$pag_sql}" ) );
    280             $total_blogs = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(DISTINCT bm.blog_id) FROM {$bp->blogs->table_name} b, {$bp->blogs->table_name_blogmeta} bm, {$wpdb->base_prefix}blogs wb WHERE b.blog_id = wb.blog_id AND b.blog_id = bm.blog_id AND wb.archived = '0' AND wb.spam = 0 AND wb.mature = 0 AND wb.deleted = 0 {$hidden_sql} AND bm.meta_key = 'last_activity' {$user_sql} ORDER BY CONVERT(bm.meta_value, SIGNED) DESC" ) );
    281         }
    282 
    283         return array( 'blogs' => $paged_blogs, 'total' => $total_blogs );
    284     }
    285 
    286     function get_alphabetical( $limit = null, $page = null, $user_id = false, $search_terms = false ) {
    287         global $bp, $wpdb;
    288 
    289         if ( !$bp->blogs )
    290             bp_blogs_setup_globals();
    291 
    292         if ( !is_user_logged_in() || ( !is_site_admin() && ( $user_id != $bp->loggedin_user->id ) ) )
    293             $hidden_sql = "AND wb.public = 1";
    294 
    295         if ( $limit && $page )
    296             $pag_sql = $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) );
    297 
    298         if ( $user_id ) {
    299             $blog_ids = $wpdb->escape( implode( ',', (array)BP_Blogs_Blog::get_blog_ids_for_user( $user_id ) ) );
    300 
    301             if ( empty( $blog_ids ) )
    302                 return false;
    303             else
    304                 $user_sql = $wpdb->prepare( " AND b.blog_id IN ( {$blog_ids} ) " );
    305         }
    306 
    307         if ( !empty( $search_terms ) ) {
    308             $filter = like_escape( $wpdb->escape( $search_terms ) );
    309             $paged_blogs = $wpdb->get_results( $wpdb->prepare( "SELECT DISTINCT b.blog_id FROM {$bp->blogs->table_name} b, {$bp->blogs->table_name_blogmeta} bm, {$bp->blogs->table_name_blogmeta} bm2, {$bp->blogs->table_name_blogmeta} bm3, {$wpdb->base_prefix}blogs wb WHERE b.blog_id = wb.blog_id AND b.blog_id = bm.blog_id AND b.blog_id = bm2.blog_id AND b.blog_id = bm3.blog_id {$hidden_sql} AND wb.archived = '0' AND wb.spam = 0 AND wb.mature = 0 AND wb.deleted = 0 AND bm.meta_key = 'last_activity' AND bm2.meta_key = 'name' AND ( ( bm3.meta_key = 'name' OR bm3.meta_key = 'description' ) AND bm3.meta_value LIKE '%%$filter%%' ) {$user_sql} ORDER BY bm2.meta_value ASC {$pag_sql}" ) );
    310             $total_blogs = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(DISTINCT b.blog_id) FROM {$bp->blogs->table_name} b, {$bp->blogs->table_name_blogmeta} bm, {$bp->blogs->table_name_blogmeta} bm2, {$bp->blogs->table_name_blogmeta} bm3, {$wpdb->base_prefix}blogs wb WHERE b.blog_id = wb.blog_id AND b.blog_id = bm.blog_id AND b.blog_id = bm2.blog_id AND b.blog_id = bm3.blog_id {$hidden_sql} AND wb.archived = '0' AND wb.spam = 0 AND wb.mature = 0 AND wb.deleted = 0 AND bm.meta_key = 'last_activity' AND bm2.meta_key = 'name' AND ( ( bm3.meta_key = 'name' OR bm3.meta_key = 'description' ) AND bm3.meta_value LIKE '%%$filter%%' ) {$user_sql}" ) );
    311         } else {
    312             $paged_blogs = $wpdb->get_results( $wpdb->prepare( "SELECT DISTINCT b.blog_id FROM {$bp->blogs->table_name} b, {$bp->blogs->table_name_blogmeta} bm, {$bp->blogs->table_name_blogmeta} bm2, {$wpdb->base_prefix}blogs wb WHERE b.blog_id = wb.blog_id AND b.blog_id = bm.blog_id AND b.blog_id = bm2.blog_id {$hidden_sql} AND wb.archived = '0' AND wb.spam = 0 AND wb.mature = 0 AND wb.deleted = 0 AND bm.meta_key = 'last_activity' AND bm2.meta_key = 'name' {$user_sql} ORDER BY bm2.meta_value ASC {$pag_sql}" ) );
    313             $total_blogs = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(DISTINCT b.blog_id) FROM {$bp->blogs->table_name} b, {$bp->blogs->table_name_blogmeta} bm, {$bp->blogs->table_name_blogmeta} bm2, {$wpdb->base_prefix}blogs wb WHERE b.blog_id = wb.blog_id AND b.blog_id = bm.blog_id AND b.blog_id = bm2.blog_id {$hidden_sql} AND wb.archived = '0' AND wb.spam = 0 AND wb.mature = 0 AND wb.deleted = 0 AND bm.meta_key = 'last_activity' AND bm2.meta_key = 'name' {$user_sql}" ) );
    314         }
    315 
    316         return array( 'blogs' => $paged_blogs, 'total' => $total_blogs );
    317     }
    318 
    319     function get_newest( $limit = null, $page = null, $user_id = false, $search_terms = false ) {
    320         global $bp, $wpdb;
    321 
    322         if ( !$bp->blogs )
    323             bp_blogs_setup_globals();
    324 
    325         if ( !is_user_logged_in() || ( !is_site_admin() && ( $user_id != $bp->loggedin_user->id ) ) )
    326             $hidden_sql = "AND wb.public = 1";
    327 
    328         if ( $limit && $page )
    329             $pag_sql = $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) );
    330 
    331         if ( $user_id ) {
    332             $blog_ids = $wpdb->escape( implode( ',', (array)BP_Blogs_Blog::get_blog_ids_for_user( $bp->loggedin_user->id ) ) );
    333 
    334             if ( empty( $blog_ids ) )
    335                 return false;
    336             else
    337                 $user_sql = $wpdb->prepare( " AND b.blog_id IN ( {$blog_ids} ) " );
    338         }
    339 
    340         if ( !empty( $search_terms ) ) {
    341             $filter = like_escape( $wpdb->escape( $search_terms ) );
    342             $paged_blogs = $wpdb->get_results( $wpdb->prepare( "SELECT DISTINCT b.blog_id FROM {$wpdb->base_prefix}blogs wb, {$bp->blogs->table_name} b, {$bp->blogs->table_name_blogmeta} bm WHERE b.blog_id = wb.blog_id AND b.blog_id = bm.blog_id {$hidden_sql} AND wb.archived = '0' AND wb.spam = 0 AND wb.mature = 0 AND wb.deleted = 0 AND ( ( bm.meta_key = 'name' OR bm.meta_key = 'description' ) AND bm.meta_value LIKE '%%$filter%%' ) {$user_sql} ORDER BY wb.registered DESC {$pag_sql}" ) );
    343             $total_blogs = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(DISTINCT b.blog_id) FROM {$wpdb->base_prefix}blogs wb, {$bp->blogs->table_name} b, {$bp->blogs->table_name_blogmeta} bm WHERE b.blog_id = wb.blog_id AND b.blog_id = bm.blog_id {$hidden_sql} AND wb.archived = '0' AND wb.spam = 0 AND wb.mature = 0 AND wb.deleted = 0 AND ( ( bm.meta_key = 'name' OR bm.meta_key = 'description' ) AND bm.meta_value LIKE '%%$filter%%' ) {$user_sql} ORDER BY wb.registered DESC" ) );
    344         } else {
    345             $paged_blogs = $wpdb->get_results( $wpdb->prepare( "SELECT DISTINCT wb.blog_id FROM {$wpdb->base_prefix}blogs wb, {$bp->blogs->table_name} b WHERE wb.blog_id = b.blog_id {$hidden_sql} AND wb.archived = '0' AND wb.spam = 0 AND wb.mature = 0 AND wb.deleted = 0 {$user_sql} ORDER BY wb.registered DESC {$pag_sql}" ) );
    346             $total_blogs = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(DISTINCT wb.blog_id) FROM {$wpdb->base_prefix}blogs wb, {$bp->blogs->table_name} b WHERE wb.blog_id = b.blog_id {$hidden_sql} AND wb.archived = '0' AND wb.spam = 0 AND wb.mature = 0 AND wb.deleted = 0 {$user_sql} ORDER BY wb.registered DESC" ) );
    347         }
    348 
    349         return array( 'blogs' => $paged_blogs, 'total' => $total_blogs );
     276    function get_blog_extras( $paged_blogs, $blog_ids, $type = false ) {
     277        global $bp, $wpdb;
     278
     279        if ( empty( $blog_ids ) )
     280            return $paged_blogs;
     281
     282        /* Fetch lastest post for each blog. */
     283        $post_ids = $wpdb->get_results( $wpdb->prepare( "SELECT p.post_id, p.blog_id FROM {$bp->blogs->table_name_blog_posts} p LEFT JOIN {$wpdb->base_prefix}blogs b ON p.blog_id = b.blog_id WHERE b.deleted = 0 AND b.archived = '0' AND b.spam = 0 AND b.mature = 0 AND p.blog_id IN ( {$blog_ids} ) GROUP BY p.blog_id ORDER BY p.date_created DESC" ) );
     284
     285        for ( $i = 0; $i < count( $paged_blogs ); $i++ ) {
     286            foreach ( $post_ids as $post ) {
     287                if ( $post->blog_id == $paged_blogs[$i]->blog_id ) {
     288                    $paged_blogs[$i]->latest_post = $wpdb->get_row( "SELECT post_title, guid FROM {$wpdb->base_prefix}" . $post->blog_id . "_posts WHERE post_status = 'publish' AND post_type = 'post' ORDER BY id DESC LIMIT 1" );
     289                }
     290            }
     291        }
     292
     293        return $paged_blogs;
    350294    }
    351295
  • trunk/bp-blogs/bp-blogs-templatetags.php

    r2524 r2536  
    2424        $this->pag_num = isset( $_REQUEST['num'] ) ? intval( $_REQUEST['num'] ) : $per_page;
    2525
    26         if ( isset( $_REQUEST['letter'] ) && '' != $_REQUEST['letter'] ) {
     26        if ( isset( $_REQUEST['letter'] ) && '' != $_REQUEST['letter'] )
    2727            $this->blogs = BP_Blogs_Blog::get_by_letter( $_REQUEST['letter'], $this->pag_num, $this->pag_page );
    28         } else {
    29             switch ( $type ) {
    30                 case 'random':
    31                     $this->blogs = BP_Blogs_Blog::get_random( $this->pag_num, $this->pag_page, $user_id, $search_terms );
    32                     break;
    33 
    34                 case 'alphabetical':
    35                     $this->blogs = BP_Blogs_Blog::get_alphabetical( $this->pag_num, $this->pag_page, $user_id, $search_terms );
    36                     break;
    37 
    38                 case 'newest':
    39                     $this->blogs = BP_Blogs_Blog::get_newest( $this->pag_num, $this->pag_page, $user_id, $search_terms );
    40                     break;
    41 
    42                 case 'active': default:
    43                     $this->blogs = BP_Blogs_Blog::get_active( $this->pag_num, $this->pag_page, $user_id, $search_terms );
    44                     break;
    45             }
    46         }
     28        else
     29            $this->blogs = BP_Blogs_Blog::get( $type, $this->pag_num, $this->pag_page, $user_id, $search_terms );
    4730
    4831        if ( !$max || $max >= (int)$this->blogs['total'] )
     
    219202            'class' => 'avatar',
    220203            'id' => false,
    221             'alt' => __( 'Blog avatar', 'buddypress' )
     204            'alt' => __( 'Blog avatar', 'buddypress' ),
     205            'no_grav' => true
    222206        );
    223207
     
    228212         * In future BuddyPress versions you will be able to set the avatar for a blog.
    229213         * Right now you can use a filter with the ID of the blog to change it if you wish.
     214         * By default it will return the avatar for the primary blog admin.
    230215         */
    231         return apply_filters( 'bp_get_blog_avatar_' . $blogs_template->blog->blog_id, bp_core_fetch_avatar( array( 'item_id' => $blogs_template->blog->blog_id, 'object' => 'blog', 'type' => $type, 'avatar_dir' => 'blog-avatars', 'alt' => $alt, 'width' => $width, 'height' => $height, 'class' => $class, 'email' => get_blog_option( $blogs_template->blog->blog_id, 'admin_email' ) ) ) );
     216        return apply_filters( 'bp_get_blog_avatar_' . $blogs_template->blog->blog_id, bp_core_fetch_avatar( array( 'item_id' => $blogs_template->blog->admin_user_id, 'type' => $type, 'alt' => $alt, 'width' => $width, 'height' => $height, 'class' => $class, 'email' => $blogs_template->blog->admin_user_email ) ) );
    232217    }
    233218        /* DEPRECATED */
     
    241226        global $blogs_template;
    242227
    243         return apply_filters( 'bp_get_blog_permalink', get_blog_option( $blogs_template->blog->blog_id, 'siteurl' ) );
     228        if ( empty( $blogs_template->blog->domain ) )
     229            $permalink = $bp->root_domain . $blogs_template->blog->path;
     230        else {
     231            $protocol = 'http://';
     232            if ( is_ssl() )
     233                $protocol = 'https://';
     234
     235            $permalink = $protocol . $blogs_template->blog->domain . $blogs_template->blog->path;
     236        }
     237
     238        return apply_filters( 'bp_get_blog_permalink', $permalink );
    244239    }
    245240
     
    250245        global $blogs_template;
    251246
    252         return apply_filters( 'bp_get_blog_name', get_blog_option( $blogs_template->blog->blog_id, 'blogname' ) );
     247        return apply_filters( 'bp_get_blog_name', $blogs_template->blog->name );
    253248    }
    254249
     
    259254        global $blogs_template;
    260255
    261         return apply_filters( 'bp_get_blog_description', get_blog_option( $blogs_template->blog->blog_id, 'blogdescription' ) );
     256        return apply_filters( 'bp_get_blog_description', $blogs_template->blog->description );
    262257    }
    263258
     
    268263        global $blogs_template;
    269264
    270         return apply_filters( 'bp_blog_last_active', bp_core_get_last_activity( bp_blogs_get_blogmeta( $blogs_template->blog->blog_id, 'last_activity' ), __( 'active %s ago', 'buddypress' ) ) );
     265        return apply_filters( 'bp_blog_last_active', bp_core_get_last_activity( $blogs_template->blog->last_activity, __( 'active %s ago', 'buddypress' ) ) );
    271266    }
    272267
     
    277272        global $blogs_template;
    278273
    279         if ( $post = bp_blogs_get_latest_posts( $blogs_template->blog->blog_id, 1 ) ) {
    280             return apply_filters( 'bp_get_blog_latest_post', sprintf( __( 'Latest Post: %s', 'buddypress' ), '<a href="' . bp_post_get_permalink( $post[0], $blogs_template->blog->blog_id ) . '">' . apply_filters( 'the_title', $post[0]->post_title ) . '</a>' ) );
    281         }
     274        if ( null == $blogs_template->blog->latest_post )
     275            return false;
     276
     277        return apply_filters( 'bp_get_blog_latest_post', sprintf( __( 'Latest Post: %s', 'buddypress' ), '<a href="' . $blogs_template->blog->latest_post->guid . '">' . apply_filters( 'the_title', $blogs_template->blog->latest_post->post_title ) . '</a>' ) );
    282278    }
    283279
Note: See TracChangeset for help on using the changeset viewer.