Skip to:
Content

BuddyPress.org

Ticket #6431: 6431.diff

File 6431.diff, 4.9 KB (added by Mamaduka, 4 years ago)
  • src/bp-groups/classes/class-bp-groups-group.php

    diff --git src/bp-groups/classes/class-bp-groups-group.php src/bp-groups/classes/class-bp-groups-group.php
    index 52361ff..66d788e 100644
    class BP_Groups_Group { 
    909909
    910910                // Populate some extra information instead of querying each time in the loop.
    911911                if ( !empty( $r['populate_extras'] ) ) {
    912                         $paged_groups = BP_Groups_Group::get_group_extras( $paged_groups, $group_ids, $r['type'] );
     912                        $paged_groups = BP_Groups_Group::get_group_extras( $paged_groups, $group_ids, $r['type'], $r['user_id'] );
    913913                }
    914914
    915915                // Grab all groupmeta.
    class BP_Groups_Group { 
    11861186                        foreach ( (array) $paged_groups as $group ) {
    11871187                                $group_ids[] = $group->id;
    11881188                        }
    1189                         $paged_groups = BP_Groups_Group::get_group_extras( $paged_groups, $group_ids, 'newest' );
     1189                        $paged_groups = BP_Groups_Group::get_group_extras( $paged_groups, $group_ids, 'newest', $user_id );
    11901190                }
    11911191
    11921192                return array( 'groups' => $paged_groups, 'total' => $total_groups );
    class BP_Groups_Group { 
    13181318                        foreach ( (array) $paged_groups as $group ) {
    13191319                                $group_ids[] = $group->id;
    13201320                        }
    1321                         $paged_groups = BP_Groups_Group::get_group_extras( $paged_groups, $group_ids, 'newest' );
     1321                        $paged_groups = BP_Groups_Group::get_group_extras( $paged_groups, $group_ids, 'newest', $user_id );
    13221322                }
    13231323
    13241324                return array( 'groups' => $paged_groups, 'total' => $total_groups );
    class BP_Groups_Group { 
    13401340         * @param string|bool  $type         Not used.
    13411341         * @return array $paged_groups
    13421342         */
    1343         public static function get_group_extras( &$paged_groups, &$group_ids, $type = false ) {
     1343        public static function get_group_extras( &$paged_groups, &$group_ids, $type = false, $user_id = false ) {
    13441344                global $wpdb;
    13451345
    1346                 if ( empty( $group_ids ) )
     1346                if ( empty( $group_ids ) ) {
    13471347                        return $paged_groups;
     1348                }
     1349
     1350                $user_id = empty( $user_id ) ? bp_loggedin_user_id() : $user_id;
    13481351
    13491352                $bp = buddypress();
    13501353
    13511354                // Sanitize group IDs.
    13521355                $group_ids = implode( ',', wp_parse_id_list( $group_ids ) );
    13531356
    1354                 // Fetch the logged-in user's status within each group.
    1355                 if ( is_user_logged_in() ) {
    1356                         $user_status_results = $wpdb->get_results( $wpdb->prepare( "SELECT group_id, is_confirmed, invite_sent FROM {$bp->groups->table_name_members} WHERE user_id = %d AND group_id IN ( {$group_ids} ) AND is_banned = 0", bp_loggedin_user_id() ) );
     1357                // Fetch the user's status within each group.
     1358                if ( ! empty( $user_id ) ) {
     1359                        $extras = $wpdb->get_results( $wpdb->prepare( "SELECT group_id, is_confirmed, invite_sent, is_banned FROM {$bp->groups->table_name_members} WHERE user_id = %d AND group_id IN ( {$group_ids} )", $user_id ) );
    13571360                } else {
    1358                         $user_status_results = array();
     1361                        $extras = array();
    13591362                }
    13601363
    13611364                // Reindex.
    13621365                $user_status = array();
    1363                 foreach ( $user_status_results as $user_status_result ) {
    1364                         $user_status[ $user_status_result->group_id ] = $user_status_result;
     1366                foreach ( $extras as $extra ) {
     1367                        $user_status[ $extra->group_id ] = $extra;
    13651368                }
    13661369
     1370                // Mock defaults values for extras
     1371                $is_member = $is_invited = $is_pending = '0';
     1372                $is_banned = false;
     1373
    13671374                for ( $i = 0, $count = count( $paged_groups ); $i < $count; ++$i ) {
    1368                         $is_member = $is_invited = $is_pending = '0';
    13691375                        $gid = $paged_groups[ $i ]->id;
    13701376
    13711377                        if ( isset( $user_status[ $gid ] ) ) {
    1372 
    1373                                 // The is_confirmed means the user is a member.
    13741378                                if ( $user_status[ $gid ]->is_confirmed ) {
    13751379                                        $is_member = '1';
     1380                                }
    13761381
    1377                                 // The invite_sent means the user has been invited.
    1378                                 } elseif ( $user_status[ $gid ]->invite_sent ) {
     1382                                if ( $user_status[ $gid ]->invite_sent ) {
    13791383                                        $is_invited = '1';
     1384                                }
    13801385
    1381                                 // User has sent request, but has not been confirmed.
    1382                                 } else {
     1386                                // If isn't member and invited update pending flag.
     1387                                if ( '1' !== $is_member && '1' !== $is_invited ) {
    13831388                                        $is_pending = '1';
    13841389                                }
     1390
     1391                                // If user is banned reset extras to default values.
     1392                                if ( $user_status[ $gid ]->is_banned ) {
     1393                                        $is_member = $is_invited = $is_pending = '0';
     1394                                        $is_banned = true;
     1395                                }
    13851396                        }
    13861397
    1387                         $paged_groups[ $i ]->is_member = $is_member;
     1398                        $paged_groups[ $i ]->is_member  = $is_member;
    13881399                        $paged_groups[ $i ]->is_invited = $is_invited;
    13891400                        $paged_groups[ $i ]->is_pending = $is_pending;
    1390                 }
    1391 
    1392                 if ( is_user_logged_in() ) {
    1393                         $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() ) );
    1394                 } else {
    1395                         $user_banned = array();
    1396                 }
    1397 
    1398                 for ( $i = 0, $count = count( $paged_groups ); $i < $count; ++$i ) {
    1399                         $paged_groups[$i]->is_banned = false;
    1400 
    1401                         foreach ( (array) $user_banned as $group_id ) {
    1402                                 if ( $group_id == $paged_groups[$i]->id ) {
    1403                                         $paged_groups[$i]->is_banned = true;
    1404                                 }
    1405                         }
     1401                        $paged_groups[ $i ]->is_banned  = $is_banned;
    14061402                }
    14071403
    14081404                return $paged_groups;