Skip to:
Content

BuddyPress.org


Ignore:
Timestamp:
12/04/2014 01:47:49 AM (10 years ago)
Author:
boonebgorges
Message:

Introduce Member Types API.

BuddyPress member types are akin to WordPress's custom post types. Developers
can use bp_register_member_type() to register their types with BuddyPress,
and BP will automatically provide a number of pieces of functionality:

  • Mechanisms for storing and fetching member types (as a WP taxonomy term), with full cache support.
  • A 'member_type' argument for the bp_has_members()/BP_User_Query stack, which allows filtering member loops by member type.
  • Admin UI for changing member types on Dashboard > Users > Community Profile (appears when member types have been registered).

We'll continue to build out more core member type functionality in future
versions of BuddyPress. In the meantime, this is a good starting point for BP
site implementations to have a shared infrastructure for storing and retrieving
this data.

See #6006.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/tests/phpunit/testcases/core/class-bp-user-query.php

    r9139 r9210  
    408408    }
    409409
     410    /**
     411     * @group member_types
     412     */
     413    public function test_member_type_single_value() {
     414        bp_register_member_type( 'foo' );
     415        bp_register_member_type( 'bar' );
     416        $users = $this->factory->user->create_many( 3 );
     417        bp_set_member_type( $users[0], 'foo' );
     418        bp_set_member_type( $users[1], 'bar' );
     419
     420        $q = new BP_User_Query( array(
     421            'member_type' => 'bar',
     422        ) );
     423
     424        $found = array_values( wp_list_pluck( $q->results, 'ID' ) );
     425        $this->assertEquals( array( $users[1] ), $found );
     426    }
     427
     428    /**
     429     * @group member_types
     430     */
     431    public function test_member_type_array_with_single_value() {
     432        bp_register_member_type( 'foo' );
     433        bp_register_member_type( 'bar' );
     434        $users = $this->factory->user->create_many( 3 );
     435        bp_set_member_type( $users[0], 'foo' );
     436        bp_set_member_type( $users[1], 'bar' );
     437
     438        $q = new BP_User_Query( array(
     439            'member_type' => array( 'bar' ),
     440        ) );
     441
     442        $found = array_values( wp_list_pluck( $q->results, 'ID' ) );
     443        $this->assertEquals( array( $users[1] ), $found );
     444    }
     445
     446    /**
     447     * @group member_types
     448     */
     449    public function test_member_type_comma_separated_values() {
     450        bp_register_member_type( 'foo' );
     451        bp_register_member_type( 'bar' );
     452        $users = $this->factory->user->create_many( 3 );
     453        bp_set_member_type( $users[0], 'foo' );
     454        bp_set_member_type( $users[1], 'bar' );
     455
     456        $q = new BP_User_Query( array(
     457            'member_type' => 'foo, bar',
     458        ) );
     459
     460        $found = array_values( wp_list_pluck( $q->results, 'ID' ) );
     461        $this->assertEqualSets( array( $users[0], $users[1] ), $found );
     462    }
     463
     464    /**
     465     * @group member_types
     466     */
     467    public function test_member_type_array_with_multiple_values() {
     468        bp_register_member_type( 'foo' );
     469        bp_register_member_type( 'bar' );
     470        $users = $this->factory->user->create_many( 3 );
     471        bp_set_member_type( $users[0], 'foo' );
     472        bp_set_member_type( $users[1], 'bar' );
     473
     474        $q = new BP_User_Query( array(
     475            'member_type' => array( 'foo', 'bar' ),
     476        ) );
     477
     478        $found = array_values( wp_list_pluck( $q->results, 'ID' ) );
     479        $this->assertEqualSets( array( $users[0], $users[1] ), $found );
     480    }
     481
     482    /**
     483     * @group member_types
     484     */
     485    public function test_member_type_comma_separated_values_should_discard_non_existent_taxonomies() {
     486        bp_register_member_type( 'foo' );
     487        bp_register_member_type( 'bar' );
     488        $users = $this->factory->user->create_many( 3 );
     489        bp_set_member_type( $users[0], 'foo' );
     490        bp_set_member_type( $users[1], 'bar' );
     491
     492        $q = new BP_User_Query( array(
     493            'member_type' => 'foo, baz',
     494        ) );
     495
     496        $found = array_values( wp_list_pluck( $q->results, 'ID' ) );
     497        $this->assertEqualSets( array( $users[0] ), $found );
     498    }
     499
     500
     501    /**
     502     * @group cache
     503     * @group member_types
     504     */
     505    public function test_member_type_should_be_prefetched_into_cache_during_user_query() {
     506        bp_register_member_type( 'foo' );
     507        bp_register_member_type( 'bar' );
     508        $users = $this->factory->user->create_many( 4 );
     509        bp_set_member_type( $users[0], 'foo' );
     510        bp_set_member_type( $users[1], 'bar' );
     511        bp_set_member_type( $users[2], 'foo' );
     512
     513        $q = new BP_User_Query( array(
     514            'include' => $users,
     515        ) );
     516
     517        $this->assertSame( 'foo', wp_cache_get( $users[0], 'bp_member_type' ) );
     518        $this->assertSame( 'bar', wp_cache_get( $users[1], 'bp_member_type' ) );
     519        $this->assertSame( 'foo', wp_cache_get( $users[2], 'bp_member_type' ) );
     520        $this->assertSame( '', wp_cache_get( $users[3], 'bp_member_type' ) );
     521    }
    410522}
Note: See TracChangeset for help on using the changeset viewer.