Skip to:
Content

BuddyPress.org

Changeset 2536


Ignore:
Timestamp:
02/02/2010 03:31:49 PM (17 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.