Skip to:
Content

BuddyPress.org

Changeset 3371


Ignore:
Timestamp:
11/07/2010 11:17:17 AM (16 years ago)
Author:
boonebgorges
Message:

Reapplies changes to BP_Groups_Group::get methods that were accidentally reverted in r3300. Adds exclude parameters to groups get methods. Fixes #2639

Location:
trunk
Files:
5 edited

Legend:

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

    r3369 r3371  
    125125                $sql['from'] = "FROM " . CUSTOM_USER_TABLE . " u LEFT JOIN " . CUSTOM_USER_META_TABLE . " um ON um.user_id = u.ID";
    126126
    127                 if ( $search_terms && function_exists( 'xprofile_install' ) || 'alphabetical' == $type )
     127                if ( $search_terms && bp_is_active( 'xprofile' ) || 'alphabetical' == $type )
    128128                        $sql['join_profiledata'] = "LEFT JOIN {$bp->profile->table_name_data} pd ON u.ID = pd.user_id";
    129129
     
    155155                }
    156156
    157                 else if ( $user_id && function_exists( 'friends_install' ) ) {
     157                else if ( $user_id && bp_is_active( 'friends' ) ) {
    158158                        $friend_ids = friends_get_friend_user_ids( $user_id );
    159159                        $friend_ids = $wpdb->escape( implode( ',', (array)$friend_ids ) );
  • trunk/bp-groups.php

    r3369 r3371  
    141141
    142142                        if ( is_user_logged_in() && groups_is_user_member( $bp->loggedin_user->id, $bp->groups->current_group->id ) ) {
    143                                 if ( function_exists('friends_install') )
     143                                if ( bp_is_active('friends') )
    144144                                        bp_core_new_subnav_item( array( 'name' => __( 'Send Invites', 'buddypress' ), 'slug' => 'send-invites', 'parent_url' => $group_link, 'parent_slug' => $bp->groups->slug, 'screen_function' => 'groups_screen_group_invite', 'item_css_id' => 'invite', 'position' => 70, 'user_has_access' => $bp->groups->current_group->user_has_access ) );
    145145                        }
     
    17681768                'type' => 'active', // active, newest, alphabetical, random, popular, most-forum-topics or most-forum-posts
    17691769                'user_id' => false, // Pass a user_id to limit to only groups that this user is a member of
     1770                'include' => false, // Only include these specific groups (group_ids)
     1771                'exclude' => false, // Do not include these specific groups (group_ids)
    17701772                'search_terms' => false, // Limit to groups that match these search terms
    17711773
     
    17781780        extract( $params, EXTR_SKIP );
    17791781
    1780         switch ( $type ) {
    1781                 case 'active': default:
    1782                         $groups = BP_Groups_Group::get_active( $per_page, $page, $user_id, $search_terms, $populate_extras );
    1783                         break;
    1784                 case 'newest':
    1785                         $groups = BP_Groups_Group::get_newest( $per_page, $page, $user_id, $search_terms, $populate_extras );
    1786                         break;
    1787                 case 'popular':
    1788                         $groups = BP_Groups_Group::get_popular( $per_page, $page, $user_id, $search_terms, $populate_extras );
    1789                         break;
    1790                 case 'alphabetical':
    1791                         $groups = BP_Groups_Group::get_alphabetically( $per_page, $page, $user_id, $search_terms, $populate_extras );
    1792                         break;
    1793                 case 'random':
    1794                         $groups = BP_Groups_Group::get_random( $per_page, $page, $user_id, $search_terms, $populate_extras );
    1795                         break;
    1796                 case 'most-forum-topics':
    1797                         $groups = BP_Groups_Group::get_by_most_forum_topics( $per_page, $page, $user_id, $search_terms, $populate_extras );
    1798                         break;
    1799                 case 'most-forum-posts':
    1800                         $groups = BP_Groups_Group::get_by_most_forum_posts( $per_page, $page, $user_id, $search_terms, $populate_extras );
    1801                         break;
    1802         }
     1782        $groups = BP_Groups_Group::get( $type, $per_page, $page, $user_id, $search_terms, $include, $populate_extras, $exclude );
    18031783
    18041784        return apply_filters( 'groups_get_groups', $groups, &$params );
     
    21612141/*** Group Invitations *********************************************************/
    21622142
    2163 function groups_get_invites_for_user( $user_id = false, $limit = false, $page = false ) {
     2143function groups_get_invites_for_user( $user_id = false, $limit = false, $page = false, $exclude = false ) {
    21642144        global $bp;
    21652145
     
    21672147                $user_id = $bp->loggedin_user->id;
    21682148
    2169         return BP_Groups_Member::get_invites( $user_id, $limit, $page );
     2149        return BP_Groups_Member::get_invites( $user_id, $limit, $page, $exclude );
    21702150}
    21712151
  • trunk/bp-groups/bp-groups-classes.php

    r3369 r3371  
    256256        }
    257257
    258         /* TODO: Merge all these get_() functions into one. */
    259 
    260         function get_newest( $limit = null, $page = null, $user_id = false, $search_terms = false, $populate_extras = true ) {
    261                 global $wpdb, $bp;
    262 
    263                 $pag_sql = '';
    264                 if ( $limit && $page )
    265                         $pag_sql = $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) );
    266 
    267                 $hidden_sql = '';
    268                 if ( !is_user_logged_in() || ( !is_super_admin() && ( $user_id != $bp->loggedin_user->id ) ) )
    269                         $hidden_sql = "AND g.status != 'hidden'";
    270 
    271                 $search_sql = '';
     258        function get( $type = 'newest', $per_page = null, $page = null, $user_id = false, $search_terms = false, $include = false, $populate_extras = true, $exclude = false ) {
     259                global $wpdb, $bp;
     260
     261                $sql = array();
     262
     263                $sql['select'] = "SELECT g.*, gm1.meta_value AS total_member_count, gm2.meta_value AS last_activity";
     264                $sql['from']   = " FROM {$bp->groups->table_name_groupmeta} gm1, {$bp->groups->table_name_groupmeta} gm2,";
     265
     266                if ( !empty( $user_id ) )
     267                        $sql['members_from'] = " {$bp->groups->table_name_members} m,";
     268
     269                $sql['group_from'] = " {$bp->groups->table_name} g WHERE";
     270
     271                if ( !empty( $user_id ) )
     272                        $sql['user_where'] = " g.id = m.group_id AND";
     273
     274                $sql['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'";
     275
     276                if ( !is_user_logged_in() || ( !is_site_admin() && ( $user_id != $bp->loggedin_user->id ) ) )
     277                        $sql['hidden'] = " AND g.status != 'hidden'";
     278
    272279                if ( $search_terms ) {
    273280                        $search_terms = like_escape( $wpdb->escape( $search_terms ) );
     281                        $sql['search'] = " AND ( g.name LIKE '%%{$search_terms}%%' OR g.description LIKE '%%{$search_terms}%%' )";
     282                }
     283
     284                if ( !empty( $user_id ) )
     285                        $sql['user'] = $wpdb->prepare( " AND m.user_id = %d AND m.is_confirmed = 1 AND m.is_banned = 0", $user_id );
     286
     287                if ( !empty( $include ) ) {
     288                        $include = $wpdb->escape( $include );
     289                        $sql['include'] = " AND g.id IN ({$include})";
     290                }
     291               
     292                if ( !empty( $exclude ) ) {
     293                        $exclude = $wpdb->escape( $exclude );
     294                        $sql['exclude'] = " AND g.id NOT IN ({$exclude})";
     295                }
     296
     297                switch ( $type ) {
     298                        case 'newest': default:
     299                                $sql['order'] = " ORDER BY g.date_created DESC";
     300                                break;
     301                        case 'active':
     302                                $sql[] = "ORDER BY last_activity DESC";
     303                                break;
     304                        case 'popular':
     305                                $sql[] = "ORDER BY CONVERT(gm1.meta_value, SIGNED) DESC";
     306                                break;
     307                        case 'alphabetical':
     308                                $sql[] = "ORDER BY g.name ASC";
     309                                break;
     310                        case 'random':
     311                                $sql[] = "ORDER BY rand()";
     312                                break;
     313                }
     314
     315                if ( $per_page && $page )
     316                        $sql['pagination'] = $wpdb->prepare( "LIMIT %d, %d", intval( ( $page - 1 ) * $per_page), intval( $per_page ) );
     317
     318                /* Get paginated results */
     319                $paged_groups = $wpdb->get_results( join( ' ', (array)$sql ) );
     320
     321                $total_sql['select'] = "SELECT COUNT(g.id) FROM {$bp->groups->table_name} g";
     322
     323                if ( !empty( $user_id ) )
     324                        $total_sql['select'] .= ", {$bp->groups->table_name_members} m";
     325
     326                if ( !empty( $sql['hidden'] ) )
     327                        $total_sql['where'][] = "g.status != 'hidden'";
     328
     329                if ( !empty( $sql['search'] ) )
     330                        $total_sql['where'][] = "( g.name LIKE '%%{$search_terms}%%' OR g.description LIKE '%%{$search_terms}%%' )";
     331
     332                if ( !empty( $user_id ) )
     333                        $total_sql['where'][] = "m.group_id = g.id AND m.user_id = {$user_id} AND m.is_confirmed = 1 AND m.is_banned = 0";
     334
     335                if ( !empty( $exclude ) ) {
     336                        $exclude = $wpdb->escape( $exclude );
     337                        $total_sql['where'][] = " g.id NOT IN ({$exclude})";
     338                }
     339
     340                $t_sql = $total_sql['select'];
     341
     342                if ( !empty( $total_sql['where'] ) )
     343                        $t_sql .= " WHERE " . join( ' AND ', (array)$total_sql['where'] );
     344
     345                /* Get total group results */
     346                $total_groups = $wpdb->get_var( join( ' ', (array)$t_sql ) );
     347
     348                /* Populate some extra information instead of querying each time in the loop */
     349                if ( !empty( $populate_extras ) ) {
     350                        foreach ( (array)$paged_groups as $group ) $group_ids[] = $group->id;
     351                        $group_ids = $wpdb->escape( join( ',', (array)$group_ids ) );
     352                        $paged_groups = BP_Groups_Group::get_group_extras( &$paged_groups, $group_ids, $type );
     353                }
     354
     355                unset( $sql, $total_sql );
     356
     357                return array( 'groups' => $paged_groups, 'total' => $total_groups );
     358        }
     359       
     360        function get_by_most_forum_topics( $limit = null, $page = null, $user_id = false, $search_terms = false, $populate_extras = true, $exclude = false ) {
     361                global $wpdb, $bp, $bbdb;
     362
     363                if ( !$bbdb )
     364                        do_action( 'bbpress_init' );
     365
     366                if ( $limit && $page ) {
     367                        $pag_sql = $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) );
     368                }
     369
     370                if ( !is_user_logged_in() || ( !is_super_admin() && ( $user_id != $bp->loggedin_user->id ) ) )
     371                        $hidden_sql = " AND g.status != 'hidden'";
     372
     373                if ( !empty( $search_terms ) ) {
     374                        $search_terms = like_escape( $wpdb->escape( $search_terms ) );
    274375                        $search_sql = " AND ( g.name LIKE '%%{$search_terms}%%' OR g.description LIKE '%%{$search_terms}%%' )";
     376                }
     377               
     378                if ( !empty( $exclude ) ) {
     379                        $exclude = $wpdb->escape( $exclude );
     380                        $exclude_sql = " AND g.id NOT IN ({$exclude})";
    275381                }
    276382
    277383                if ( $user_id ) {
    278384                        $user_id = $wpdb->escape( $user_id );
    279                         $paged_groups = $wpdb->get_results( "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_members} m, {$bp->groups->table_name} g WHERE g.id = m.group_id AND g.id = gm1.group_id AND g.id = gm2.group_id AND gm2.meta_key = 'last_activity' AND gm1.meta_key = 'total_member_count' {$hidden_sql} {$search_sql} AND m.user_id = {$user_id} AND m.is_confirmed = 1 AND m.is_banned = 0 ORDER BY g.date_created DESC {$pag_sql}" );
    280                         $total_groups = $wpdb->get_var( "SELECT COUNT(DISTINCT m.group_id) FROM {$bp->groups->table_name_members} m LEFT JOIN {$bp->groups->table_name_groupmeta} gm ON m.group_id = gm.group_id INNER JOIN {$bp->groups->table_name} g ON m.group_id = g.id WHERE gm.meta_key = 'last_activity'{$hidden_sql} {$search_sql} AND m.user_id = {$user_id} AND m.is_confirmed = 1 AND m.is_banned = 0" );
     385                        $paged_groups = $wpdb->get_results( "SELECT DISTINCT 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_groupmeta} gm3, {$bp->groups->table_name_members} m, {$bbdb->forums} f, {$bp->groups->table_name} g WHERE g.id = m.group_id AND 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) AND f.topics > 0 {$hidden_sql} {$search_sql} AND m.user_id = {$user_id} AND m.is_confirmed = 1 AND m.is_banned = 0 {$exclude_sql} ORDER BY f.topics DESC {$pag_sql}" );
     386                        $total_groups = $wpdb->get_var( "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) AND f.topics > 0 {$hidden_sql} {$search_sql} AND m.user_id = {$user_id} AND m.is_confirmed = 1 AND m.is_banned = 0 {$exclude_sql}" );
    281387                } else {
    282                         $paged_groups = $wpdb->get_results( "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' {$hidden_sql} {$search_sql} ORDER BY g.date_created DESC {$pag_sql}" );
    283                         $total_groups = $wpdb->get_var( "SELECT COUNT(DISTINCT g.id) FROM {$bp->groups->table_name_groupmeta} gm INNER JOIN {$bp->groups->table_name} g ON gm.group_id = g.id WHERE gm.meta_key = 'last_activity'{$hidden_sql} {$search_sql}" );
    284                 }
    285 
    286                 if ( !empty( $populate_extras ) ) {
    287                         $group_ids = array();
    288                         foreach ( (array)$paged_groups as $group ) $group_ids[] = $group->id;
    289                         $group_ids = $wpdb->escape( join( ',', (array)$group_ids ) );
    290                         $paged_groups = BP_Groups_Group::get_group_extras( &$paged_groups, $group_ids, 'newest' );
    291                 }
    292 
    293                 return array( 'groups' => $paged_groups, 'total' => $total_groups );
    294         }
    295 
    296         function get_active( $limit = null, $page = null, $user_id = false, $search_terms = false, $populate_extras = true ) {
    297                 global $wpdb, $bp;
    298 
    299                 $pag_sql = '';
    300                 if ( $limit && $page )
    301                         $pag_sql = $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) );
    302 
    303                 $hidden_sql = '';
    304                 if ( !is_user_logged_in() || ( !is_super_admin() && ( $user_id != $bp->loggedin_user->id ) ) )
    305                         $hidden_sql = "AND g.status != 'hidden'";
    306 
    307                 $search_sql = '';
    308                 if ( $search_terms ) {
    309                         $search_terms = like_escape( $wpdb->escape( $search_terms ) );
    310                         $search_sql = " AND ( g.name LIKE '%%{$search_terms}%%' OR g.description LIKE '%%{$search_terms}%%' )";
    311                 }
    312 
    313                 if ( $user_id ) {
    314                         $user_id = $wpdb->escape( $user_id );
    315                         $paged_groups = $wpdb->get_results( "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_members} m, {$bp->groups->table_name} g WHERE g.id = m.group_id AND g.id = gm1.group_id AND g.id = gm2.group_id AND gm2.meta_key = 'last_activity' AND gm1.meta_key = 'total_member_count' {$hidden_sql} {$search_sql} AND m.user_id = {$user_id} AND m.is_confirmed = 1 AND m.is_banned = 0 ORDER BY last_activity DESC {$pag_sql}" );
    316                         $total_groups = $wpdb->get_var( "SELECT COUNT(DISTINCT m.group_id) FROM {$bp->groups->table_name_members} m LEFT JOIN {$bp->groups->table_name_groupmeta} gm ON m.group_id = gm.group_id INNER JOIN {$bp->groups->table_name} g ON m.group_id = g.id WHERE gm.meta_key = 'last_activity'{$hidden_sql} {$search_sql} AND m.user_id = {$user_id} AND m.is_confirmed = 1 AND m.is_banned = 0" );
    317                 } else {
    318                         $paged_groups = $wpdb->get_results( "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' {$hidden_sql} {$search_sql} ORDER BY last_activity DESC {$pag_sql}" );
    319                         $total_groups = $wpdb->get_var( "SELECT COUNT(DISTINCT g.id) FROM {$bp->groups->table_name_groupmeta} gm INNER JOIN {$bp->groups->table_name} g ON gm.group_id = g.id WHERE gm.meta_key = 'last_activity'{$hidden_sql} {$search_sql}" );
    320                 }
    321 
    322                 if ( !empty( $populate_extras ) ) {
    323                         $group_ids = array();
    324                         foreach ( (array)$paged_groups as $group ) $group_ids[] = $group->id;
    325                         $group_ids = $wpdb->escape( join( ',', (array)$group_ids ) );
    326                         $paged_groups = BP_Groups_Group::get_group_extras( &$paged_groups, $group_ids, 'newest' );
    327                 }
    328 
    329                 return array( 'groups' => $paged_groups, 'total' => $total_groups );
    330         }
    331 
    332         function get_popular( $limit = null, $page = null, $user_id = false, $search_terms = false, $populate_extras = true ) {
    333                 global $wpdb, $bp;
    334 
    335                 $pag_sql = '';
    336                 if ( $limit && $page ) {
    337                         $pag_sql = $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) );
    338                 }
    339 
    340                 $hidden_sql = '';
    341                 if ( !is_user_logged_in() || ( !is_super_admin() && ( $user_id != $bp->loggedin_user->id ) ) )
    342                         $hidden_sql = "AND g.status != 'hidden'";
    343 
    344                 $search_sql = '';
    345                 if ( $search_terms ) {
    346                         $search_terms = like_escape( $wpdb->escape( $search_terms ) );
    347                         $search_sql = " AND ( g.name LIKE '%%{$search_terms}%%' OR g.description LIKE '%%{$search_terms}%%' )";
    348                 }
    349 
    350                 if ( $user_id ) {
    351                         $user_id = $wpdb->escape( $user_id );
    352                         $paged_groups = $wpdb->get_results( "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_members} m, {$bp->groups->table_name} g WHERE g.id = m.group_id AND g.id = gm1.group_id AND g.id = gm2.group_id AND gm2.meta_key = 'last_activity' AND gm1.meta_key = 'total_member_count' {$hidden_sql} {$search_sql} AND m.user_id = {$user_id} AND m.is_confirmed = 1 AND m.is_banned = 0 ORDER BY CONVERT(gm1.meta_value, SIGNED) DESC {$pag_sql}" );
    353                         $total_groups = $wpdb->get_var( "SELECT COUNT(DISTINCT m.group_id) FROM {$bp->groups->table_name_members} m LEFT JOIN {$bp->groups->table_name_groupmeta} gm ON m.group_id = gm.group_id INNER JOIN {$bp->groups->table_name} g ON m.group_id = g.id WHERE gm.meta_key = 'last_activity'{$hidden_sql} {$search_sql} AND m.user_id = {$user_id} AND m.is_confirmed = 1 AND m.is_banned = 0" );
    354                 } else {
    355                         $paged_groups = $wpdb->get_results( "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' {$hidden_sql} {$search_sql} ORDER BY CONVERT(gm1.meta_value, SIGNED) DESC {$pag_sql}" );
    356                         $total_groups = $wpdb->get_var( "SELECT COUNT(DISTINCT g.id) 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' {$hidden_sql} {$search_sql}" );
    357                 }
    358 
    359                 if ( !empty( $populate_extras ) ) {
    360                         $group_ids = array();
    361                         foreach ( (array)$paged_groups as $group ) $group_ids[] = $group->id;
    362                         $group_ids = $wpdb->escape( join( ',', (array)$group_ids ) );
    363                         $paged_groups = BP_Groups_Group::get_group_extras( &$paged_groups, $group_ids, 'newest' );
    364                 }
    365 
    366                 return array( 'groups' => $paged_groups, 'total' => $total_groups );
    367         }
    368 
    369         function get_alphabetically( $limit = null, $page = null, $user_id = false, $search_terms = false, $populate_extras = true ) {
    370                 global $wpdb, $bp;
    371 
    372                 $pag_sql = '';
    373                 if ( $limit && $page )
    374                         $pag_sql = $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) );
    375 
    376                 $hidden_sql = '';
    377                 if ( !is_user_logged_in() || ( !is_super_admin() && ( $user_id != $bp->loggedin_user->id ) ) )
    378                         $hidden_sql = " AND g.status != 'hidden'";
    379 
    380                 $search_sql = '';
    381                 if ( $search_terms ) {
    382                         $search_terms = like_escape( $wpdb->escape( $search_terms ) );
    383                         $search_sql = " AND ( g.name LIKE '%%{$search_terms}%%' OR g.description LIKE '%%{$search_terms}%%' )";
    384                 }
    385 
    386                 if ( $user_id ) {
    387                         $user_id = $wpdb->escape( $user_id );
    388                         $paged_groups = $wpdb->get_results( "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_members} m, {$bp->groups->table_name} g WHERE g.id = m.group_id AND g.id = gm1.group_id AND g.id = gm2.group_id AND gm2.meta_key = 'last_activity' AND gm1.meta_key = 'total_member_count' {$hidden_sql} {$search_sql} AND m.user_id = {$user_id} AND m.is_confirmed = 1 AND m.is_banned = 0 ORDER BY g.name ASC {$pag_sql}" );
    389                         $total_groups = $wpdb->get_var( "SELECT COUNT(DISTINCT m.group_id) FROM {$bp->groups->table_name_members} m LEFT JOIN {$bp->groups->table_name_groupmeta} gm ON m.group_id = gm.group_id INNER JOIN {$bp->groups->table_name} g ON m.group_id = g.id WHERE gm.meta_key = 'last_activity' {$hidden_sql} {$search_sql} AND m.user_id = {$user_id} AND m.is_confirmed = 1 AND m.is_banned = 0" );
    390                 } else {
    391                         $paged_groups = $wpdb->get_results( "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' {$hidden_sql} {$search_sql} ORDER BY g.name ASC {$pag_sql}" );
    392                         $total_groups = $wpdb->get_var( "SELECT COUNT(DISTINCT g.id) 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' {$hidden_sql} {$search_sql}" );
    393                 }
    394 
    395                 if ( !empty( $populate_extras ) ) {
    396                         $group_ids = array();
    397                         foreach ( (array)$paged_groups as $group ) $group_ids[] = $group->id;
    398                         $group_ids = $wpdb->escape( join( ',', (array)$group_ids ) );
    399                         $paged_groups = BP_Groups_Group::get_group_extras( &$paged_groups, $group_ids, 'newest' );
    400                 }
    401 
    402                 return array( 'groups' => $paged_groups, 'total' => $total_groups );
    403         }
    404 
    405         function get_by_most_forum_topics( $limit = null, $page = null, $user_id = false, $search_terms = false, $populate_extras = true ) {
    406                 global $wpdb, $bp, $bbdb;
    407 
    408                 if ( !$bbdb )
    409                         do_action( 'bbpress_init' );
    410 
    411                 if ( $limit && $page ) {
    412                         $pag_sql = $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) );
    413                 }
    414 
    415                 if ( !is_user_logged_in() || ( !is_super_admin() && ( $user_id != $bp->loggedin_user->id ) ) )
    416                         $hidden_sql = " AND g.status != 'hidden'";
    417 
    418                 if ( $search_terms ) {
    419                         $search_terms = like_escape( $wpdb->escape( $search_terms ) );
    420                         $search_sql = " AND ( g.name LIKE '%%{$search_terms}%%' OR g.description LIKE '%%{$search_terms}%%' )";
    421                 }
    422 
    423                 if ( $user_id ) {
    424                         $user_id = $wpdb->escape( $user_id );
    425                         $paged_groups = $wpdb->get_results( "SELECT DISTINCT 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_groupmeta} gm3, {$bp->groups->table_name_members} m, {$bbdb->forums} f, {$bp->groups->table_name} g WHERE g.id = m.group_id AND 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) AND f.topics > 0 {$hidden_sql} {$search_sql} AND m.user_id = {$user_id} AND m.is_confirmed = 1 AND m.is_banned = 0 ORDER BY f.topics DESC {$pag_sql}" );
    426                         $total_groups = $wpdb->get_var( "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) AND f.topics > 0 {$hidden_sql} {$search_sql} AND m.user_id = {$user_id} AND m.is_confirmed = 1 AND m.is_banned = 0" );
    427                 } else {
    428                         $paged_groups = $wpdb->get_results( "SELECT DISTINCT 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_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) AND f.topics > 0 {$hidden_sql} {$search_sql} ORDER BY f.topics DESC {$pag_sql}" );
    429                         $total_groups = $wpdb->get_var( "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) AND f.topics > 0 {$hidden_sql} {$search_sql}" );
     388                        $paged_groups = $wpdb->get_results( "SELECT DISTINCT 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_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) AND f.topics > 0 {$hidden_sql} {$search_sql} {$exclude_sql} ORDER BY f.topics DESC {$pag_sql}" );
     389                        $total_groups = $wpdb->get_var( "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) AND f.topics > 0 {$hidden_sql} {$search_sql} {$exclude_sql}" );
    430390                }
    431391
     
    439399        }
    440400
    441         function get_by_most_forum_posts( $limit = null, $page = null, $search_terms = false, $populate_extras = true ) {
     401        function get_by_most_forum_posts( $limit = null, $page = null, $search_terms = false, $populate_extras = true, $exclude = false ) {
    442402                global $wpdb, $bp, $bbdb;
    443403
     
    456416                        $search_sql = " AND ( g.name LIKE '%%{$search_terms}%%' OR g.description LIKE '%%{$search_terms}%%' )";
    457417                }
     418               
     419                if ( !empty( $exclude ) ) {
     420                        $exclude = $wpdb->escape( $exclude );
     421                        $exclude_sql = " AND g.id NOT IN ({$exclude})";
     422                }
    458423
    459424                if ( $user_id ) {
    460425                        $user_id = $wpdb->escape( $user_id );
    461                         $paged_groups = $wpdb->get_results( "SELECT DISTINCT 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_groupmeta} gm3, {$bp->groups->table_name_members} m, {$bbdb->forums} f, {$bp->groups->table_name} g WHERE g.id = m.group_id AND 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} AND m.user_id = {$user_id} AND m.is_confirmed = 1 AND m.is_banned = 0 ORDER BY f.posts ASC {$pag_sql}" );
    462                         $total_groups = $wpdb->get_results( "SELECT COUNT(DISTINCT g.id) FROM {$bp->groups->table_name_groupmeta} gm1, {$bp->groups->table_name_groupmeta} gm2, {$bp->groups->table_name_groupmeta} gm3, {$bp->groups->table_name_members} m, {$bbdb->forums} f, {$bp->groups->table_name} g WHERE g.id = m.group_id AND 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) AND f.posts > 0 {$hidden_sql} {$search_sql} AND m.user_id = {$user_id} AND m.is_confirmed = 1 AND m.is_banned = 0" );
     426                        $paged_groups = $wpdb->get_results( "SELECT DISTINCT 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_groupmeta} gm3, {$bp->groups->table_name_members} m, {$bbdb->forums} f, {$bp->groups->table_name} g WHERE g.id = m.group_id AND 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} AND m.user_id = {$user_id} AND m.is_confirmed = 1 AND m.is_banned = 0 {$exclude_sql} ORDER BY f.posts ASC {$pag_sql}" );
     427                        $total_groups = $wpdb->get_results( "SELECT COUNT(DISTINCT g.id) FROM {$bp->groups->table_name_groupmeta} gm1, {$bp->groups->table_name_groupmeta} gm2, {$bp->groups->table_name_groupmeta} gm3, {$bp->groups->table_name_members} m, {$bbdb->forums} f, {$bp->groups->table_name} g WHERE g.id = m.group_id AND 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) AND f.posts > 0 {$hidden_sql} {$search_sql} AND m.user_id = {$user_id} AND m.is_confirmed = 1 AND m.is_banned = 0 {$exclude_sql} " );
    463428                } else {
    464                         $paged_groups = $wpdb->get_results( "SELECT DISTINCT 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_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) AND f.posts > 0 {$hidden_sql} {$search_sql} ORDER BY f.posts ASC {$pag_sql}" );
    465                         $total_groups = $wpdb->get_var( "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}" );
     429                        $paged_groups = $wpdb->get_results( "SELECT DISTINCT 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_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) AND f.posts > 0 {$hidden_sql} {$search_sql} {$exclude_sql} ORDER BY f.posts ASC {$pag_sql}" );
     430                        $total_groups = $wpdb->get_var( "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} {$exclude_sql}" );
    466431                }
    467432
     
    475440        }
    476441
    477         function get_all( $limit = null, $page = null, $only_public = true, $sort_by = false, $order = false ) {
    478                 global $wpdb, $bp;
    479 
    480                 // Default sql WHERE conditions are blank. TODO: generic handler function.
    481                 $where_sql = null;
    482                 $where_conditions = array();
    483 
    484                 // Limit results to public status
    485                 if ( $only_public )
    486                         $where_conditions[] = $wpdb->prepare( "g.status = 'public'" );
    487 
    488                 if ( !is_super_admin() )
    489                         $where_conditions[] = $wpdb->prepare( "g.status != 'hidden'");
    490 
    491                 // Build where sql statement if necessary
    492                 if ( !empty( $where_conditions ) )
    493                         $where_sql = 'WHERE ' . join( ' AND ', $where_conditions );
    494 
    495                 if ( $limit && $page )
    496                         $pag_sql = $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) );
    497 
    498                 if ( $sort_by && $order ) {
    499                         $sort_by = $wpdb->escape( $sort_by );
    500                         $order = $wpdb->escape( $order );
    501                         $order_sql = "ORDER BY g.$sort_by $order";
    502 
    503                         switch ( $sort_by ) {
    504                                 default:
    505                                         $sql = $wpdb->prepare( "SELECT * FROM {$bp->groups->table_name} g {$where_sql} {$order_sql} {$pag_sql}" );
    506                                         break;
    507                                 case 'members':
    508                                         $sql = $wpdb->prepare( "SELECT * FROM {$bp->groups->table_name} g, {$bp->groups->table_name_groupmeta} gm WHERE g.id = gm.group_id AND gm.meta_key = 'total_member_count' {$hidden_sql} {$public_sql} ORDER BY CONVERT(gm.meta_value, SIGNED) {$order} {$pag_sql}" );
    509                                         break;
    510                                 case 'last_active':
    511                                         $sql = $wpdb->prepare( "SELECT * FROM {$bp->groups->table_name} g, {$bp->groups->table_name_groupmeta} gm WHERE g.id = gm.group_id AND gm.meta_key = 'last_activity' {$hidden_sql} {$public_sql} ORDER BY CONVERT(gm.meta_value, SIGNED) {$order} {$pag_sql}" );
    512                                         break;
    513                         }
    514                 } else {
    515                         $sql = $wpdb->prepare( "SELECT * FROM {$bp->groups->table_name} g {$where_sql} {$order_sql} {$pag_sql}" );
    516                 }
    517 
    518                 return $wpdb->get_results($sql);
    519         }
    520 
    521         function get_by_letter( $letter, $limit = null, $page = null, $populate_extras = true ) {
     442        function get_by_letter( $letter, $limit = null, $page = null, $populate_extras = true, $exclude = false ) {
    522443                global $wpdb, $bp;
    523444
     
    533454                }
    534455
     456                if ( !empty( $exclude ) ) {
     457                        $exclude = $wpdb->escape( $exclude );
     458                        $exclude_sql = " AND g.id NOT IN ({$exclude})";
     459                }
     460
    535461                if ( !is_super_admin() )
    536462                        $hidden_sql = $wpdb->prepare( " AND status != 'hidden'");
     
    540466                if ( $limit && $page ) {
    541467                        $pag_sql = $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) );
    542                         $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} 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}" ) );
    543                 }
    544 
    545                 $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}"  ) );
     468                        $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} 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} {$exclude_sql}" ) );
     469                }
     470
     471                $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} {$exclude_sql} ORDER BY g.name ASC {$pag_sql}"  ) );
    546472
    547473                if ( !empty( $populate_extras ) ) {
     
    554480        }
    555481
    556         function get_random( $limit = null, $page = null, $user_id = false, $search_terms = false, $populate_extras = true ) {
     482        function get_random( $limit = null, $page = null, $user_id = false, $search_terms = false, $populate_extras = true, $exclude = false ) {
    557483                global $wpdb, $bp;
    558484
     
    567493                        $search_sql = " AND ( g.name LIKE '%%{$search_terms}%%' OR g.description LIKE '%%{$search_terms}%%' )";
    568494                }
     495               
     496                if ( !empty( $exclude ) ) {
     497                        $exclude = $wpdb->escape( $exclude );
     498                        $exclude_sql = " AND g.id NOT IN ({$exclude})";
     499                }
    569500
    570501                if ( $user_id ) {
    571502                        $user_id = $wpdb->escape( $user_id );
    572                         $paged_groups = $wpdb->get_results( "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_members} m, {$bp->groups->table_name} g WHERE g.id = m.group_id AND g.id = gm1.group_id AND g.id = gm2.group_id AND gm2.meta_key = 'last_activity' AND gm1.meta_key = 'total_member_count' {$hidden_sql} {$search_sql} AND m.user_id = {$user_id} AND m.is_confirmed = 1 AND m.is_banned = 0 ORDER BY rand() {$pag_sql}" );
    573                         $total_groups = $wpdb->get_var( "SELECT COUNT(DISTINCT m.group_id) FROM {$bp->groups->table_name_members} m LEFT JOIN {$bp->groups->table_name_groupmeta} gm ON m.group_id = gm.group_id INNER JOIN {$bp->groups->table_name} g ON m.group_id = g.id WHERE gm.meta_key = 'last_activity'{$hidden_sql} {$search_sql} AND m.user_id = {$user_id} AND m.is_confirmed = 1 AND m.is_banned = 0" );
     503                        $paged_groups = $wpdb->get_results( "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_members} m, {$bp->groups->table_name} g WHERE g.id = m.group_id AND g.id = gm1.group_id AND g.id = gm2.group_id AND gm2.meta_key = 'last_activity' AND gm1.meta_key = 'total_member_count' {$hidden_sql} {$search_sql} AND m.user_id = {$user_id} AND m.is_confirmed = 1 AND m.is_banned = 0 {$exclude_sql} ORDER BY rand() {$pag_sql}" );
     504                        $total_groups = $wpdb->get_var( "SELECT COUNT(DISTINCT m.group_id) FROM {$bp->groups->table_name_members} m LEFT JOIN {$bp->groups->table_name_groupmeta} gm ON m.group_id = gm.group_id INNER JOIN {$bp->groups->table_name} g ON m.group_id = g.id WHERE gm.meta_key = 'last_activity'{$hidden_sql} {$search_sql} AND m.user_id = {$user_id} AND m.is_confirmed = 1 AND m.is_banned = 0 {$exclude_sql}" );
    574505                } else {
    575                         $paged_groups = $wpdb->get_results( "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' {$hidden_sql} {$search_sql} ORDER BY rand() {$pag_sql}" );
    576                         $total_groups = $wpdb->get_var( "SELECT COUNT(DISTINCT g.id) FROM {$bp->groups->table_name_groupmeta} gm INNER JOIN {$bp->groups->table_name} g ON gm.group_id = g.id WHERE gm.meta_key = 'last_activity'{$hidden_sql} {$search_sql}" );
     506                        $paged_groups = $wpdb->get_results( "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' {$hidden_sql} {$search_sql} {$exclude_sql} ORDER BY rand() {$pag_sql}" );
     507                        $total_groups = $wpdb->get_var( "SELECT COUNT(DISTINCT g.id) FROM {$bp->groups->table_name_groupmeta} gm INNER JOIN {$bp->groups->table_name} g ON gm.group_id = g.id WHERE gm.meta_key = 'last_activity'{$hidden_sql} {$search_sql} {$exclude_sql}" );
    577508                }
    578509
     
    927858        }
    928859
    929         function get_invites( $user_id, $limit = false, $page = false ) {
     860        function get_invites( $user_id, $limit = false, $page = false, $exclude = false ) {
    930861                global $wpdb, $bp;
    931862
    932863                if ( $limit && $page )
    933864                        $pag_sql = $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) );
    934 
    935                 $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_members} m, {$bp->groups->table_name} g WHERE g.id = m.group_id AND 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 m.is_confirmed = 0 AND m.inviter_id != 0 AND m.invite_sent = 1 AND m.user_id = %d ORDER BY m.date_modified ASC {$pag_sql}", $user_id ) );
    936                 $total_groups = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(DISTINCT m.group_id) FROM {$bp->groups->table_name_members} m, {$bp->groups->table_name} g WHERE m.group_id = g.id AND m.is_confirmed = 0 AND m.inviter_id != 0 AND m.invite_sent = 1 AND m.user_id = %d ORDER BY date_modified ASC", $user_id ) );
     865               
     866                if ( $exclude )
     867                        $exclude_sql = $wpdb->prepare( " AND g.id NOT IN (%s)", $exclude );
     868
     869                $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_members} m, {$bp->groups->table_name} g WHERE g.id = m.group_id AND 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 m.is_confirmed = 0 AND m.inviter_id != 0 AND m.invite_sent = 1 AND m.user_id = %d {$exclude_sql} ORDER BY m.date_modified ASC {$pag_sql}", $user_id ) );
     870                $total_groups = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(DISTINCT m.group_id) FROM {$bp->groups->table_name_members} m, {$bp->groups->table_name} g WHERE m.group_id = g.id AND m.is_confirmed = 0 AND m.inviter_id != 0 AND m.invite_sent = 1 AND m.user_id = %d {$exclude_sql} ORDER BY date_modified ASC", $user_id ) );
    937871
    938872                return array( 'groups' => $paged_groups, 'total' => $total_groups );
     
    10931027                $user_ids = $wpdb->escape( join( ',', (array)$user_ids ) );
    10941028
    1095                 if ( function_exists( 'friends_install' ) ) {
     1029                if ( bp_is_active( 'friends' ) ) {
    10961030                        $friend_status = $wpdb->get_results( $wpdb->prepare( "SELECT initiator_user_id, friend_user_id, is_confirmed FROM {$bp->friends->table_name} WHERE (initiator_user_id = %d AND friend_user_id IN ( {$user_ids} ) ) OR (initiator_user_id IN ( {$user_ids} ) AND friend_user_id = %d )", $bp->loggedin_user->id, $bp->loggedin_user->id ) );
    10971031                        for ( $i = 0; $i < count( $members ); $i++ ) {
  • trunk/bp-groups/bp-groups-templatetags.php

    r3365 r3371  
    2323        var $order;
    2424
    25         function bp_groups_template( $user_id, $type, $page, $per_page, $max, $slug, $search_terms, $include, $populate_extras ) {
     25        function bp_groups_template( $user_id, $type, $page, $per_page, $max, $slug, $search_terms, $include, $populate_extras, $exclude ) {
    2626                global $bp;
    2727
     
    3030
    3131                if ( 'invites' == $type ) {
    32                         $this->groups = groups_get_invites_for_user( $user_id, $this->pag_num, $this->pag_page );
     32                        $this->groups = groups_get_invites_for_user( $user_id, $this->pag_num, $this->pag_page, $exclude );
    3333                } else if ( 'single-group' == $type ) {
    3434                        $group = new stdClass;
     
    3636                        $this->groups    = array( $group );
    3737                } else {
    38                         $this->groups = groups_get_groups( array( 'type' => $type, 'per_page' => $this->pag_num, 'page' => $this->pag_page, 'user_id' => $user_id, 'search_terms' => $search_terms, 'include' => $include, 'populate_extras' => $populate_extras ) );
     38                        $this->groups = groups_get_groups( array( 'type' => $type, 'per_page' => $this->pag_num, 'page' => $this->pag_page, 'user_id' => $user_id, 'search_terms' => $search_terms, 'include' => $include, 'exclude' => $exclude, 'populate_extras' => $populate_extras ) );
    3939                }
    4040
     
    173173                'search_terms' => $search_terms, // Pass search terms to return only matching groups
    174174                'include' => false, // Pass comma separated list of group ID's to return only these groups
     175                'exclude' => false, // Pass comma separated list of group ID's to exclude these groups
    175176
    176177                'populate_extras' => true // Get extra meta - is_member, is_banned
     
    180181        extract( $r );
    181182
    182         $groups_template = new BP_Groups_Template( (int)$user_id, $type, (int)$page, (int)$per_page, (int)$max, $slug, $search_terms, $include, (bool)$populate_extras );
     183        $groups_template = new BP_Groups_Template( (int)$user_id, $type, (int)$page, (int)$per_page, (int)$max, $slug, $search_terms, $include, (bool)$populate_extras, $exclude );
    183184        return apply_filters( 'bp_has_groups', $groups_template->has_groups(), &$groups_template );
    184185}
  • trunk/bp-themes/bp-default/groups/single/members.php

    r2626 r3371  
    2929                                <?php do_action( 'bp_group_members_list_item' ) ?>
    3030
    31                                 <?php if ( function_exists( 'friends_install' ) ) : ?>
     31                                <?php if ( bp_is_active( 'friends' ) ) : ?>
    3232
    3333                                        <div class="action">
Note: See TracChangeset for help on using the changeset viewer.