Index: src/bp-groups/classes/class-bp-groups-member.php
===================================================================
--- src/bp-groups/classes/class-bp-groups-member.php	(revision 12272)
+++ src/bp-groups/classes/class-bp-groups-member.php	(working copy)
@@ -1431,23 +1431,33 @@
 	 * @since 1.0.0
 	 *
 	 * @param int $user_id ID of the user.
-	 * @return mixed
+	 * @return bool
 	 */
 	public static function delete_all_for_user( $user_id ) {
-		global $wpdb;
+		$group_ids = BP_Groups_Member::get_group_ids( $user_id );
 
-		$bp = buddypress();
-
-		// Get all the group ids for the current user's groups and update counts.
-		$group_ids = BP_Groups_Member::get_group_ids( $user_id );
 		foreach ( $group_ids['groups'] as $group_id ) {
-			groups_update_groupmeta( $group_id, 'total_member_count', groups_get_total_member_count( $group_id ) - 1 );
+			if ( groups_is_user_admin( $user_id, $group_id ) ) {
+				// If the user is a sole group admin, install a site admin as their replacement.
+				if ( count( groups_get_group_admins( $group_id ) ) < 2 ) {
+					$admin = get_users( [
+						'blog_id' => bp_get_root_blog_id(),
+						'fields'  => 'id',
+						'number'  => 1,
+						'orderby' => 'ID',
+						'role'    => 'administrator',
+					] );
 
-			// If current user is the creator of a group and is the sole admin, delete that group to avoid counts going out-of-sync.
-			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 ) )
-				groups_delete_group( $group_id );
+					if ( ! empty( $admin ) ) {
+						groups_join_group( $group_id, $admin[0] );
+						groups_promote_member( $admin[0], $group_id, 'admin' );
+					}
+				}
+			}
+
+			groups_leave_group( $group_id, $user_id );
 		}
 
-		return $wpdb->query( $wpdb->prepare( "DELETE FROM {$bp->groups->table_name_members} WHERE user_id = %d", $user_id ) );
+		return true;
 	}
 }
