Skip to:
Content

BuddyPress.org

Changeset 11378


Ignore:
Timestamp:
01/06/2017 03:56:09 AM (9 years ago)
Author:
boonebgorges
Message:

Lazy-load user property in BP_Groups_Member.

The user property is a BP_Core_User object, but is rarely
used by BP core. Only loading it when needed can save database
queries in certain cases, such as when a user is being promoted
or demoted within a group.

Props r-a-y.
Fixes #7382.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/bp-groups/classes/class-bp-groups-member.php

    r11087 r11378  
    130130     * @var WP_User
    131131     */
    132     var $user;
     132    protected $user;
    133133
    134134    /**
     
    198198            $this->comments      = $member->comments;
    199199            $this->invite_sent   = (int) $member->invite_sent;
    200 
     200        }
     201    }
     202
     203    /**
     204     * Magic getter.
     205     *
     206     * @since 2.8.0
     207     *
     208     * @param string $key Key.
     209     * @return mixed
     210     */
     211    public function __get( $key ) {
     212        switch ( $key ) {
     213            case 'user' :
     214                return $this->get_user_object( $this->user_id );
     215        }
     216    }
     217
     218    /**
     219     * Magic issetter.
     220     *
     221     * @since 2.8.0
     222     *
     223     * @param string $key Key.
     224     * @return mixed
     225     */
     226    public function __isset( $key ) {
     227        switch ( $key ) {
     228            case 'user' :
     229                return true;
     230
     231            default :
     232                return isset( $this->{$key} );
     233        }
     234    }
     235
     236    /**
     237     * Get the user object corresponding to this membership.
     238     *
     239     * Used for lazyloading the protected `user` property.
     240     *
     241     * @since 2.8.0
     242     *
     243     * @return BP_Core_User
     244     */
     245    protected function get_user_object() {
     246        if ( empty( $this->user ) ) {
    201247            $this->user = new BP_Core_User( $this->user_id );
    202248        }
     249
     250        return $this->user;
    203251    }
    204252
  • trunk/tests/phpunit/testcases/groups/class-bp-groups-member.php

    r11091 r11378  
    13011301        $this->assertEqualSets( array( $m0, $m1 ), wp_list_pluck( $found, 'id' ) );
    13021302    }
     1303
     1304    /**
     1305     * @ticket BP7382
     1306     */
     1307    public function test_user_property_should_be_accessible() {
     1308        $user = $this->factory->user->create();
     1309        $group = $this->factory->group->create();
     1310
     1311        $this->add_user_to_group( $user, $group );
     1312
     1313        $membership = new BP_Groups_Member( $user, $group );
     1314
     1315        $user_obj = $membership->user;
     1316
     1317        $this->assertInstanceOf( 'BP_Core_User', $user_obj );
     1318        $this->assertEquals( $user, $user_obj->id );
     1319    }
    13031320}
Note: See TracChangeset for help on using the changeset viewer.