Skip to:
Content

BuddyPress.org

Ticket #7476: 7476.b.03.patch

File 7476.b.03.patch, 1.9 KB (added by DJPaul, 6 years ago)
  • src/bp-groups/classes/class-bp-groups-member.php

     
    14311431         * @since 1.0.0
    14321432         *
    14331433         * @param int $user_id ID of the user.
    1434          * @return mixed
     1434         * @return bool
    14351435         */
    14361436        public static function delete_all_for_user( $user_id ) {
    1437                 global $wpdb;
     1437                $group_ids = BP_Groups_Member::get_group_ids( $user_id );
    14381438
    1439                 $bp = buddypress();
    1440 
    1441                 // Get all the group ids for the current user's groups and update counts.
    1442                 $group_ids = BP_Groups_Member::get_group_ids( $user_id );
    14431439                foreach ( $group_ids['groups'] as $group_id ) {
    1444                         groups_update_groupmeta( $group_id, 'total_member_count', groups_get_total_member_count( $group_id ) - 1 );
     1440                        if ( groups_is_user_admin( $user_id, $group_id ) ) {
     1441                                // If the user is a sole group admin, install a site admin as their replacement.
     1442                                if ( count( groups_get_group_admins( $group_id ) ) < 2 ) {
     1443                                        $admin = get_users( [
     1444                                                'blog_id' => bp_get_root_blog_id(),
     1445                                                'fields'  => 'id',
     1446                                                'number'  => 1,
     1447                                                'orderby' => 'ID',
     1448                                                'role'    => 'administrator',
     1449                                        ] );
    14451450
    1446                         // If current user is the creator of a group and is the sole admin, delete that group to avoid counts going out-of-sync.
    1447                         if ( groups_is_user_admin( $user_id, $group_id ) && count( groups_get_group_admins( $group_id ) ) < 2 && groups_is_user_creator( $user_id, $group_id ) )
    1448                                 groups_delete_group( $group_id );
     1451                                        if ( ! empty( $admin ) ) {
     1452                                                groups_join_group( $group_id, $admin[0] );
     1453                                                groups_promote_member( $admin[0], $group_id, 'admin' );
     1454                                        }
     1455                                }
     1456                        }
     1457
     1458                        groups_leave_group( $group_id, $user_id );
    14491459                }
    14501460
    1451                 return $wpdb->query( $wpdb->prepare( "DELETE FROM {$bp->groups->table_name_members} WHERE user_id = %d", $user_id ) );
     1461                return true;
    14521462        }
    14531463}