Skip to:
Content

BuddyPress.org

Ticket #8371: 8371.patch

File 8371.patch, 4.1 KB (added by imath, 4 years ago)
  • src/bp-members/bp-members-functions.php

    diff --git src/bp-members/bp-members-functions.php src/bp-members/bp-members-functions.php
    index d940b9a5f..58ca8fd75 100644
    function bp_core_get_core_userdata( $user_id = 0 ) { 
    233233        return apply_filters( 'bp_core_get_core_userdata', $userdata );
    234234}
    235235
     236/**
     237 * Fetch BuddyPress extra data for a user.
     238 *
     239 * @since 7.0.0
     240 *
     241 * @param int    $user_id         The BP Member ID.
     242 * @param bool   $populate_extras True to fetch BP extra data. False otherwise.
     243 *                                Default `true`.
     244 * @param string $context         How to sanitize user fields. Looks for 'raw', 'edit', 'db', 'display',
     245 *                                'attribute' and 'js'. Default 'raw'.
     246 * @return WP_User                The user object extended with BuddyPress extra data.
     247 */
     248function bp_members_get_userdata( $user_id = 0, $populate_extras = true, $context = 'raw' ) {
     249        if ( ! $user_id ) {
     250                return false;
     251        }
     252
     253        if ( ! $populate_extras ) {
     254                return bp_core_get_core_userdata( $user_id );
     255        }
     256
     257        $userdata = get_user_by( 'ID', (int) $user_id );
     258
     259        if ( ! isset( $userdata->ID ) || ! $userdata->ID ) {
     260                return false;
     261        }
     262
     263        // The BP_Core_User is using the deprecated `id` property of the WP_User object.
     264        $bp_member = new stdClass();
     265        foreach ( get_object_vars( $userdata ) as $key => $data ) {
     266                $bp_member->{$key} = $data;
     267        }
     268
     269        $bp_member->id = $bp_member->ID;
     270
     271        $paged_users = array( $bp_member );
     272        $user_ids    = array( $bp_member->ID );
     273        BP_Core_User::get_user_extras( $paged_users, $user_ids, $type = 'alphabetical' );
     274
     275        // We only need the first index of the array.
     276        $bp_member = reset( $paged_users );
     277
     278        // Remove the password.
     279        unset( $bp_member->data->user_pass );
     280
     281        // Set the BP User domain.
     282        $bp_member->data->user_url = bp_core_get_user_domain( $bp_member->ID, $bp_member->data->user_nicename, $bp_member->data->user_login );
     283
     284        $user = new WP_User( $bp_member->data );
     285        $user->filter = $context;
     286
     287        foreach ( array_keys( get_object_vars( $user->data ) ) as $wp_prop ) {
     288                $bp_member->data->{$wp_prop} = $user->{$wp_prop};
     289        }
     290
     291        // Remove unnecessary data.
     292        $bp_data = array_diff_key(
     293                get_object_vars( $bp_member ),
     294                array(
     295                        'ID'      => false,
     296                        'data'    => false,
     297                        'filter'  => false,
     298                        'roles'   => false,
     299                        'caps'    => false,
     300                        'cap_key' => false,
     301                )
     302        );
     303
     304        // Include data specific to BuddyPress.
     305        foreach ( array_keys( $bp_data ) as $bp_prop ) {
     306                $bp_member->data->{$bp_prop} = $bp_member->{$bp_prop};
     307        }
     308
     309        /**
     310         * Filter here to add other extra data for the member.
     311         *
     312         * @since 7.0.0
     313         *
     314         * @param object  $data The user data including the data specific to BuddyPress.
     315         * @param WP_User $user The WordPress user object.
     316         */
     317        return apply_filters( 'bp_members_get_userdata', $bp_member->data, $user );
     318}
     319
    236320/**
    237321 * Return the ID of a user, based on user_login.
    238322 *
  • tests/phpunit/testcases/members/functions.php

    diff --git tests/phpunit/testcases/members/functions.php tests/phpunit/testcases/members/functions.php
    index b19936744..21ef0f685 100644
    class BP_Tests_Members_Functions extends BP_UnitTestCase { 
    743743                $user = get_userdata( $user_id );
    744744                $this->assertNotEmpty( $user->roles );
    745745        }
     746
     747        /**
     748         * @group bp_members_get_userdata
     749         */
     750        public function test_bp_members_get_userdata() {
     751                $current_user = get_current_user_id();
     752
     753                $u1 = self::factory()->user->create();
     754                $u2 = self::factory()->user->create();
     755
     756                $this->set_current_user( $u1 );
     757
     758                $a1 = bp_activity_post_update( array(
     759                        'type'          => 'activity_update',
     760                        'user_id'       => $u1,
     761                        'content'       => 'foo bar',
     762                ) );
     763
     764                friends_add_friend( $u1, $u2, true );
     765
     766                $member = bp_members_get_userdata( $u1 );
     767
     768                $this->assertEquals( 1, $member->total_friend_count );
     769                $this->assertEquals( bp_get_user_last_activity( $u1 ), $member->last_activity );
     770
     771                $activity = maybe_unserialize( $member->latest_update );
     772                $this->assertEquals( $activity['id'], $a1 );
     773
     774                $this->set_current_user( $current_user );
     775        }
    746776}