Skip to:
Content

BuddyPress.org


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

Removing database hits inside BP loops to improve overall performance.

File:
1 edited

Legend:

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

    r2431 r2533  
    4848                $this->user_dataset = $this->get_user_dataset();
    4949
    50                 //if ( !$this->total_member_count ) {
    5150                $this->total_member_count = count( $this->user_dataset );
    5251                groups_update_groupmeta( $this->id, 'total_member_count', $this->total_member_count );
    53                 //}
    5452            }
     53
     54            /* Get group extras */
     55            $this->is_member = BP_Groups_Member::check_is_member( $bp->loggedin_user->id, $this->id );
    5556        }
    5657    }
     
    336337        }
    337338
     339        $group_ids = $wpdb->escape( join( ',', (array)$group_ids ) );
     340        $paged_groups = BP_Groups_Group::get_group_extras( &$paged_groups, $group_ids, 'newest' );
     341
    338342        return array( 'groups' => $paged_groups, 'total' => $total_groups );
    339343    }
     
    361365        }
    362366
     367        foreach ( $paged_groups as $group ) $group_ids[] = $group->id;
     368        $group_ids = $wpdb->escape( join( ',', (array)$group_ids ) );
     369        $paged_groups = BP_Groups_Group::get_group_extras( &$paged_groups, $group_ids, 'active' );
     370
    363371        return array( 'groups' => $paged_groups, 'total' => $total_groups );
    364372    }
     
    387395        }
    388396
     397        $group_ids = $wpdb->escape( join( ',', (array)$group_ids ) );
     398        $paged_groups = BP_Groups_Group::get_group_extras( &$paged_groups, $group_ids, 'popular' );
     399
    389400        return array( 'groups' => $paged_groups, 'total' => $total_groups );
    390401    }
     
    412423        }
    413424
     425        $group_ids = $wpdb->escape( join( ',', (array)$group_ids ) );
     426        $paged_groups = BP_Groups_Group::get_group_extras( &$paged_groups, $group_ids, 'alphabetical' );
     427
    414428        return array( 'groups' => $paged_groups, 'total' => $total_groups );
    415429    }
     
    441455        }
    442456
     457        $group_ids = $wpdb->escape( join( ',', (array)$group_ids ) );
     458        $paged_groups = BP_Groups_Group::get_group_extras( &$paged_groups, $group_ids, 'most_forum_topics' );
     459
    443460        return array( 'groups' => $paged_groups, 'total' => $total_groups );
    444461    }
     
    469486            $total_groups = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(DISTINCT g.id) FROM {$bp->groups->table_name_groupmeta} gm1, {$bp->groups->table_name_groupmeta} gm2, {$bp->groups->table_name_groupmeta} gm3, {$bbdb->forums} f, {$bp->groups->table_name} g WHERE g.id = gm1.group_id AND g.id = gm2.group_id AND g.id = gm3.group_id AND gm2.meta_key = 'last_activity' AND gm1.meta_key = 'total_member_count' AND (gm3.meta_key = 'forum_id' AND gm3.meta_value = f.forum_id) {$hidden_sql} {$search_sql}" ) );
    470487        }
     488
     489        $group_ids = $wpdb->escape( join( ',', (array)$group_ids ) );
     490        $paged_groups = BP_Groups_Group::get_group_extras( &$paged_groups, $group_ids, 'most_forum_posts' );
    471491
    472492        return array( 'groups' => $paged_groups, 'total' => $total_groups );
     
    535555        $paged_groups = $wpdb->get_results( $wpdb->prepare( "SELECT g.*, gm1.meta_value as total_member_count, gm2.meta_value as last_activity FROM {$bp->groups->table_name_groupmeta} gm1, {$bp->groups->table_name_groupmeta} gm2, {$bp->groups->table_name} g WHERE g.id = gm1.group_id AND g.id = gm2.group_id AND gm2.meta_key = 'last_activity' AND gm1.meta_key = 'total_member_count' AND g.name LIKE '$letter%%' {$hidden_sql} {$search_sql} ORDER BY g.name ASC {$pag_sql}"  ) );
    536556
     557        $group_ids = $wpdb->escape( join( ',', (array)$group_ids ) );
     558        $paged_groups = BP_Groups_Group::get_group_extras( &$paged_groups, $group_ids, 'letter' );
     559
    537560        return array( 'groups' => $paged_groups, 'total' => $total_groups );
    538561    }
     
    560583        }
    561584
    562         return array( 'groups' => $paged_groups, 'total' => $total_groups );
     585        $group_ids = $wpdb->escape( join( ',', (array)$group_ids ) );
     586        $paged_groups = BP_Groups_Group::get_group_extras( &$paged_groups, $group_ids, 'random' );
     587
     588        return array( 'groups' => $paged_groups, 'total' => $total_groups );
     589    }
     590
     591    function get_group_extras( $paged_groups, $group_ids, $type = false ) {
     592        global $bp, $wpdb;
     593
     594        if ( empty( $group_ids ) )
     595            return $paged_groups;
     596
     597        /* Fetch the logged in users status within each group */
     598        $user_status = $wpdb->get_col( $wpdb->prepare( "SELECT group_id FROM {$bp->groups->table_name_members} WHERE user_id = %d AND group_id IN ( {$group_ids} ) AND is_confirmed = 1 AND is_banned = 0", $bp->loggedin_user->id ) );
     599        for ( $i = 0; $i < count( $paged_groups ); $i++ ) {
     600            foreach ( $user_status as $group_id ) {
     601                if ( $group_id == $paged_groups[$i]->id )
     602                    $paged_groups[$i]->is_member = true;
     603            }
     604        }
     605
     606        $user_banned = $wpdb->get_col( $wpdb->prepare( "SELECT group_id FROM {$bp->groups->table_name_members} WHERE is_banned = 1 AND user_id = %d AND group_id IN ( {$group_ids} )", $bp->loggedin_user->id ) );
     607        for ( $i = 0; $i < count( $paged_groups ); $i++ ) {
     608            foreach ( $user_banned as $group_id ) {
     609                if ( $group_id == $paged_groups[$i]->id )
     610                    $paged_groups[$i]->is_banned = true;
     611            }
     612        }
     613
     614        return $paged_groups;
    563615    }
    564616
Note: See TracChangeset for help on using the changeset viewer.