Index: src/bp-groups/classes/class-bp-groups-member.php
===================================================================
--- src/bp-groups/classes/class-bp-groups-member.php	(revision 10027)
+++ src/bp-groups/classes/class-bp-groups-member.php	(working copy)
@@ -625,7 +625,48 @@
 
 		return array( 'groups' => $paged_groups, 'total' => $total_groups );
 	}
+	
+	/**
+	 * Get the groups of which a specified user is banned from.
+	 *
+	 * @param int         $user_id ID of the user.
+	 * @param int|bool    $limit   Optional. Max number of results to return.
+	 *                             Default: false (no limit).
+	 * @param int|bool    $page    Optional. Page offset of results to return.
+	 *                             Default: false (no limit).
+	 * @param string|bool $filter  Optional. Limit results to groups whose name or
+	 *                             description field matches search terms.
+	 *
+	 * @return array {
+	 *     @type array $groups Array of groups returned by paginated query.
+	 *     @type int   $total  Count of groups matching query.
+	 * }
+	 */
+	public static function get_is_banned_of( $user_id, $limit = false, $page = false, $filter = false ) {
+	global $wpdb;
+	$bp = buddypress();
 
+	$user_id_sql = $pag_sql = $hidden_sql = $filter_sql = '';
+
+	$user_id_sql = $wpdb->prepare( 'm.user_id = %d', $user_id );
+
+	if ( ! empty( $limit ) && ! empty( $page ) )
+	    $pag_sql = $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit ), intval( $limit ) );
+
+	if ( ! empty( $filter ) ) {
+	    $search_terms_like = '%' . bp_esc_like( $filter ) . '%';
+	    $filter_sql = $wpdb->prepare( " AND ( g.name LIKE %s OR g.description LIKE %s )", $search_terms_like, $search_terms_like );
+	}
+
+	if ( ( $user_id != bp_loggedin_user_id()) && ( ! bp_current_user_can( 'bp_moderate' )) ) {
+	    $hidden_sql = " AND g.status != 'hidden'";
+	}
+	$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}{$filter_sql} AND {$user_id_sql} AND m.is_banned = 1  ORDER BY m.date_modified ASC {$pag_sql}" );
+	$total_groups = $wpdb->get_var( "SELECT COUNT(DISTINCT m.group_id) FROM {$bp->groups->table_name_members} m, {$bp->groups->table_name} g WHERE m.group_id = g.id{$hidden_sql}{$filter_sql} AND {$user_id_sql} AND  m.is_banned = 1 ORDER BY date_modified ASC" );
+
+	return array( 'groups' => $paged_groups, 'total' => $total_groups );
+    }
+	
 	/**
 	 * Get the count of groups of which the specified user is a member.
 	 *
Index: tests/phpunit/testcases/groups/class-bp-groups-member.php
===================================================================
--- tests/phpunit/testcases/groups/class-bp-groups-member.php	(revision 10027)
+++ tests/phpunit/testcases/groups/class-bp-groups-member.php	(working copy)
@@ -92,7 +92,30 @@
 		$ids = wp_list_pluck( $groups['groups'], 'id' );
 		$this->assertEquals( $ids, array( $g2 ) );
 	}
+	
+	public function test_get_is_banned_of_with_filter() {
+		$g1 = $this->factory->group->create( array(
+			'name' => 'RC Cola',
+		) );
+		$g2 = $this->factory->group->create( array(
+			'name' => 'Pepsi',
+		) );
 
+		$u = $this->factory->user->create();
+		self::add_user_to_group( $u, $g1 );
+		self::add_user_to_group( $u, $g2 );
+
+		$m1 = new BP_Groups_Member( $u, $g1 );
+		$m1->ban();
+		$m2 = new BP_Groups_Member( $u, $g2 );
+		$m1->ban();
+
+		$groups = BP_Groups_Member::get_is_banned_of( $u, false, false, 'eps' );
+
+		$ids = wp_list_pluck( $groups['groups'], 'id' );
+		$this->assertEquals( $ids, array( $g2 ) );
+	}
+
 	public function test_get_invites_with_exclude() {
 		$g1 = $this->factory->group->create( array(
 			'name' => 'RC Cola',
