Skip to:
Content

BuddyPress.org

Changeset 8022


Ignore:
Timestamp:
03/03/2014 01:48:45 AM (10 years ago)
Author:
boonebgorges
Message:

Caching improvements related to bp_core_get_user_displayname()

  • The cache check in BP_XProfile_Data::exists() should be aware that cache misses are stored as objects and check for misses accordingly
  • Ensure that fullname cache is busted when field 1 is updated
  • Some unit tests
Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/bp-xprofile/bp-xprofile-cache.php

    r7975 r8022  
    132132}
    133133add_action( 'xprofile_updated_profile', 'xprofile_clear_profile_data_object_cache'   );
     134
     135/**
     136 * Clear the fullname cache when field 1 is updated.
     137 *
     138 * xprofile_clear_profile_data_object_cache() will make this redundant in most
     139 * cases, except where the field is updated directly with xprofile_set_field_data()
     140 *
     141 * @since BuddyPress (2.0.0)
     142 */
     143function xprofile_clear_fullname_cache_on_profile_field_edit( $data ) {
     144    if ( 1 == $data->field_id ) {
     145        wp_cache_delete( 'bp_user_fullname_' . $data->user_id, 'bp' );
     146    }
     147}
     148add_action( 'xprofile_data_after_save', 'xprofile_clear_fullname_cache_on_profile_field_edit' );
    134149
    135150/**
  • trunk/bp-xprofile/bp-xprofile-classes.php

    r7965 r8022  
    11571157        $cached = wp_cache_get( $this->field_id, 'bp_xprofile_data_' . $this->user_id );
    11581158
    1159         if ( $cached ) {
     1159        if ( $cached && ! empty( $cached->id ) ) {
    11601160            $retval = true;
    11611161        } else {
  • trunk/tests/testcases/members/functions.php

    r7910 r8022  
    101101        $this->assertSame( home_url( 'new-members-slug' ) . '/' . $user->user_nicename . '/', bp_core_get_user_domain( $user_id ) );
    102102    }
     103
     104    /**
     105     * @group bp_core_get_user_displayname
     106     */
     107    public function test_bp_core_get_user_displayname_empty_username() {
     108        $this->assertFalse( bp_core_get_user_displayname( '' ) );
     109    }
     110
     111    /**
     112     * @group bp_core_get_user_displayname
     113     */
     114    public function test_bp_core_get_user_displayname_translate_username() {
     115        $u = $this->create_user();
     116
     117        $user = new WP_User( $u );
     118
     119        $found = bp_core_get_user_displayname( $u );
     120        $this->assertNotEmpty( $found );
     121        $this->assertSame( $found, bp_core_get_user_displayname( $user->user_login ) );
     122    }
     123
     124    /**
     125     * @group bp_core_get_user_displayname
     126     */
     127    public function test_bp_core_get_user_displayname_bad_username() {
     128        $this->assertFalse( bp_core_get_user_displayname( 'i_dont_exist' ) );
     129    }
     130
     131    /**
     132     * @group bp_core_get_user_displayname
     133     * @group cache
     134     */
     135    public function test_bp_core_get_user_displayname_xprofile_populate_cache() {
     136        $xprofile_is_active = bp_is_active( 'xprofile' );
     137        buddypress()->active_components['xprofile'] = '1';
     138
     139        $u = $this->create_user( array(
     140            'display_name' => 'Foo',
     141        ) );
     142        bp_core_get_user_displayname( $u );
     143
     144        $this->assertSame( 'Foo', wp_cache_get( 'bp_user_fullname_' . $u, 'bp' ) );
     145
     146        if ( ! $xprofile_is_active ) {
     147            unset( buddypress()->active_components['xprofile'] );
     148        }
     149    }
     150
     151    /**
     152     * @group bp_core_get_user_displayname
     153     * @group cache
     154     */
     155    public function test_bp_core_get_user_displayname_xprofile_bust_cache_after_xprofile_update() {
     156        $xprofile_is_active = bp_is_active( 'xprofile' );
     157        buddypress()->active_components['xprofile'] = '1';
     158
     159        $u = $this->create_user();
     160        xprofile_set_field_data( 1, $u, 'Foo Foo' );
     161
     162        $this->assertFalse( wp_cache_get( 'bp_user_fullname_' . $u, 'bp' ) );
     163
     164        if ( ! $xprofile_is_active ) {
     165            unset( buddypress()->active_components['xprofile'] );
     166        }
     167    }
     168
     169    /**
     170     * @group bp_core_get_user_displayname
     171     */
     172    public function test_bp_core_get_user_displayname_xprofile_exists() {
     173        $xprofile_is_active = bp_is_active( 'xprofile' );
     174        buddypress()->active_components['xprofile'] = '1';
     175
     176        $u = $this->create_user();
     177        xprofile_set_field_data( 1, $u, 'Foo Foo' );
     178
     179        $this->assertSame( 'Foo Foo', bp_core_get_user_displayname( $u ) );
     180
     181        if ( ! $xprofile_is_active ) {
     182            unset( buddypress()->active_components['xprofile'] );
     183        }
     184    }
     185
     186    /**
     187     * @group bp_core_get_user_displayname
     188     */
     189    public function test_bp_core_get_user_displayname_xprofile_does_not_exist() {
     190        $xprofile_is_active = bp_is_active( 'xprofile' );
     191        buddypress()->active_components['xprofile'] = '1';
     192
     193        $u = $this->create_user( array(
     194            'display_name' => 'Foo Foo',
     195        ) );
     196
     197        // Delete directly because BP won't let you delete a required
     198        // field through the API
     199        global $wpdb, $bp;
     200        $wpdb->query( $wpdb->prepare( "DELETE FROM {$bp->profile->table_name_data} WHERE user_id = %d AND field_id = 1", $u ) );
     201        wp_cache_delete( 'bp_user_fullname_' . $u, 'bp' );
     202        wp_cache_delete( 1, 'bp_xprofile_data_' . $u, 'bp' );
     203
     204        $this->assertSame( '', xprofile_get_field_data( 1, $u ) );
     205        $this->assertSame( 'Foo Foo', bp_core_get_user_displayname( $u ) );
     206        $this->assertSame( 'Foo Foo', xprofile_get_field_data( 1, $u ) );
     207
     208        if ( ! $xprofile_is_active ) {
     209            unset( buddypress()->active_components['xprofile'] );
     210        }
     211    }
    103212}
Note: See TracChangeset for help on using the changeset viewer.