Changeset 11818
- Timestamp:
- 01/25/2018 07:44:54 PM (7 years ago)
- Location:
- trunk
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/bp-core/classes/class-bp-core-user.php
r11705 r11818 166 166 $this->email = esc_attr( bp_core_get_user_email( $this->id ) ); 167 167 } 168 169 // Cache a few things that are fetched often.170 wp_cache_set( 'bp_user_fullname_' . $this->id, $this->fullname, 'bp' );171 wp_cache_set( 'bp_user_email_' . $this->id, $this->email, 'bp' );172 wp_cache_set( 'bp_user_url_' . $this->id, $this->user_url, 'bp' );173 168 174 169 $this->avatar = bp_core_fetch_avatar( array( 'item_id' => $this->id, 'type' => 'full', 'alt' => sprintf( __( 'Profile photo of %s', 'buddypress' ), $this->fullname ) ) ); -
trunk/src/bp-members/bp-members-functions.php
r11768 r11818 305 305 * @param string|bool $user_nicename Optional. user_nicename of user being checked. 306 306 * @param string|bool $user_login Optional. user_login of user being checked. 307 * @return string |bool The username of the matched user, or false.307 * @return string The username of the matched user or an empty string if no user is found. 308 308 */ 309 309 function bp_core_get_username( $user_id = 0, $user_nicename = false, $user_login = false ) { 310 $bp = buddypress(); 311 312 // Check cache for user nicename. 313 $username = wp_cache_get( 'bp_user_username_' . $user_id, 'bp' ); 314 if ( false === $username ) { 315 316 // Cache not found so prepare to update it. 317 $update_cache = true; 318 319 // Nicename and login were not passed. 320 if ( empty( $user_nicename ) && empty( $user_login ) ) { 321 322 // User ID matches logged in user. 323 if ( bp_loggedin_user_id() == $user_id ) { 324 $userdata = &$bp->loggedin_user->userdata; 325 326 // User ID matches displayed in user. 327 } elseif ( bp_displayed_user_id() == $user_id ) { 328 $userdata = &$bp->displayed_user->userdata; 329 330 // No user ID match. 331 } else { 332 $userdata = false; 333 } 334 335 // No match so go dig. 336 if ( empty( $userdata ) ) { 337 338 // User not found so return false. 339 if ( !$userdata = bp_core_get_core_userdata( $user_id ) ) { 340 return false; 341 } 342 } 343 344 // Update the $user_id for later. 345 $user_id = $userdata->ID; 346 347 // Two possible options. 348 $user_nicename = $userdata->user_nicename; 349 $user_login = $userdata->user_login; 350 } 351 310 311 if ( ! $user_nicename && ! $user_login ) { 352 312 // Pull an audible and maybe use the login over the nicename. 313 if ( bp_is_username_compatibility_mode() ) { 314 $username = get_the_author_meta( 'login', $user_id ); 315 } else { 316 $username = get_the_author_meta( 'nicename', $user_id ); 317 } 318 } else { 353 319 $username = bp_is_username_compatibility_mode() ? $user_login : $user_nicename; 354 355 // Username found in cache so don't update it again.356 } else {357 $update_cache = false;358 }359 360 // Add this to cache.361 if ( ( true === $update_cache ) && !empty( $username ) ) {362 wp_cache_set( 'bp_user_username_' . $user_id, $username, 'bp' );363 364 // @todo bust this cache if no $username found?365 // } else {366 // wp_cache_delete( 'bp_user_username_' . $user_id );367 320 } 368 321 … … 385 338 * @since 1.5.0 386 339 * 387 * @todo Refactor to use a WP core function, if possible.388 *389 340 * @param int $user_id User ID to check. 390 * @return string |bool The username of the matched user, or false.341 * @return string The username of the matched user or an empty string if no user is found. 391 342 */ 392 343 function bp_members_get_user_nicename( $user_id ) { 393 $bp = buddypress();394 395 if ( !$user_nicename = wp_cache_get( 'bp_members_user_nicename_' . $user_id, 'bp' ) ) {396 $update_cache = true;397 398 // User ID matches logged in user.399 if ( bp_loggedin_user_id() == $user_id ) {400 $userdata = &$bp->loggedin_user->userdata;401 402 // User ID matches displayed in user.403 } elseif ( bp_displayed_user_id() == $user_id ) {404 $userdata = &$bp->displayed_user->userdata;405 406 // No user ID match.407 } else {408 $userdata = false;409 }410 411 // No match so go dig.412 if ( empty( $userdata ) ) {413 414 // User not found so return false.415 if ( !$userdata = bp_core_get_core_userdata( $user_id ) ) {416 return false;417 }418 }419 420 // User nicename found.421 $user_nicename = $userdata->user_nicename;422 423 // Nicename found in cache so don't update it again.424 } else {425 $update_cache = false;426 }427 428 // Add this to cache.429 if ( true == $update_cache && !empty( $user_nicename ) ) {430 wp_cache_set( 'bp_members_user_nicename_' . $user_id, $user_nicename, 'bp' );431 }432 433 344 /** 434 345 * Filters the user_nicename based on originally provided user ID. … … 438 349 * @param string $username User nice name determined by user ID. 439 350 */ 440 return apply_filters( 'bp_members_get_user_nicename', $user_nicename);351 return apply_filters( 'bp_members_get_user_nicename', get_the_author_meta( 'nicename', $user_id ) ); 441 352 } 442 353 … … 448 359 * @param int $uid User ID to check. 449 360 * @return string The email for the matched user. Empty string if no user 450 * matched the $uid. 451 */ 452 function bp_core_get_user_email( $uid ) { 453 454 if ( !$email = wp_cache_get( 'bp_user_email_' . $uid, 'bp' ) ) { 455 456 // User exists. 457 $ud = bp_core_get_core_userdata( $uid ); 458 if ( ! empty( $ud ) ) { 459 $email = $ud->user_email; 460 461 // User was deleted. 462 } else { 463 $email = ''; 464 } 465 466 wp_cache_set( 'bp_user_email_' . $uid, $email, 'bp' ); 467 } 468 361 * matches the $user_id. 362 */ 363 function bp_core_get_user_email( $user_id ) { 469 364 /** 470 365 * Filters the user email for user based on user ID. … … 474 369 * @param string $email Email determined for the user. 475 370 */ 476 return apply_filters( 'bp_core_get_user_email', $email);371 return apply_filters( 'bp_core_get_user_email', get_the_author_meta( 'email', $user_id ) ); 477 372 } 478 373 … … 533 428 * 534 429 * @param array $user_ids Array of user IDs to get display names for. 535 * @return array 430 * @return array Associative array of the format "id" => "displayname". 536 431 */ 537 432 function bp_core_get_user_displaynames( $user_ids ) { … … 547 442 } 548 443 549 $uncached_ids = array(); 550 foreach ( $user_ids as $user_id ) { 551 if ( false === wp_cache_get( 'bp_user_fullname_' . $user_id, 'bp' ) ) { 552 $uncached_ids[] = $user_id; 553 } 554 } 555 556 // Prime caches. 557 if ( ! empty( $uncached_ids ) ) { 558 if ( bp_is_active( 'xprofile' ) ) { 559 $fullname_data = BP_XProfile_ProfileData::get_value_byid( 1, $uncached_ids ); 560 561 // Key by user_id. 562 $fullnames = array(); 563 foreach ( $fullname_data as $fd ) { 564 if ( ! empty( $fd->value ) ) { 565 $fullnames[ intval( $fd->user_id ) ] = $fd->value; 566 } 567 } 568 569 // If xprofiledata is not found for any users, we'll look 570 // them up separately. 571 $no_xprofile_ids = array_diff( $uncached_ids, array_keys( $fullnames ) ); 572 } else { 573 $fullnames = array(); 574 $no_xprofile_ids = $user_ids; 575 } 576 577 if ( ! empty( $no_xprofile_ids ) ) { 578 // Use WP_User_Query because we don't need BP information. 579 $query = new WP_User_Query( array( 580 'include' => $no_xprofile_ids, 581 'fields' => array( 'ID', 'user_nicename', 'display_name', ), 582 'count_total' => false, 583 'blog_id' => 0, 584 ) ); 585 586 foreach ( $query->results as $qr ) { 587 $fullnames[ $qr->ID ] = ! empty( $qr->display_name ) ? $qr->display_name : $qr->user_nicename; 588 589 // If xprofile is active, set this value as the 590 // xprofile display name as well. 591 if ( bp_is_active( 'xprofile' ) ) { 592 xprofile_set_field_data( 1, $qr->ID, $fullnames[ $qr->ID ] ); 593 } 594 } 595 } 596 597 foreach ( $fullnames as $fuser_id => $fname ) { 598 wp_cache_set( 'bp_user_fullname_' . $fuser_id, $fname, 'bp' ); 599 } 600 } 444 // Warm the WP users cache with a targeted bulk update. 445 cache_users( $user_ids ); 601 446 602 447 $retval = array(); 603 448 foreach ( $user_ids as $user_id ) { 604 $retval[ $user_id ] = wp_cache_get( 'bp_user_fullname_' . $user_id, 'bp');449 $retval[ $user_id ] = bp_core_get_user_displayname( $user_id ); 605 450 } 606 451 … … 632 477 } 633 478 634 $display_names = bp_core_get_user_displaynames( array( $user_id ) );635 636 if ( ! isset( $display_names[ $user_id ] ) ) {637 $fullname = false;638 } else {639 $fullname = $display_names[ $user_id ];640 }641 642 479 /** 643 480 * Filters the display name for the passed in user. … … 648 485 * @param int $user_id ID of the user to check. 649 486 */ 650 return apply_filters( 'bp_core_get_user_displayname', $fullname, $user_id );487 return apply_filters( 'bp_core_get_user_displayname', get_the_author_meta( 'display_name', $user_id ), $user_id ); 651 488 } 652 489 add_filter( 'bp_core_get_user_displayname', 'strip_tags', 1 ); -
trunk/src/bp-xprofile/bp-xprofile-cache.php
r11352 r11818 189 189 add_action( 'xprofile_group_after_delete', 'xprofile_clear_profile_groups_object_cache' ); 190 190 add_action( 'xprofile_group_after_save', 'xprofile_clear_profile_groups_object_cache' ); 191 192 /**193 * Clear cached XProfile fullname data for user.194 *195 * @since 2.1.0196 *197 * @param int $user_id ID of user whose fullname cache to delete.198 */199 function xprofile_clear_profile_data_object_cache( $user_id = 0 ) {200 wp_cache_delete( 'bp_user_fullname_' . $user_id, 'bp' );201 }202 add_action( 'xprofile_updated_profile', 'xprofile_clear_profile_data_object_cache' );203 204 /**205 * Clear the fullname cache when field 1 is updated.206 *207 * The xprofile_clear_profile_data_object_cache() will make this redundant in most208 * cases, except where the field is updated directly with xprofile_set_field_data().209 *210 * @since 2.0.0211 *212 * @param object $data Data object to clear.213 */214 function xprofile_clear_fullname_cache_on_profile_field_edit( $data ) {215 if ( 1 == $data->field_id ) {216 wp_cache_delete( 'bp_user_fullname_' . $data->user_id, 'bp' );217 }218 }219 add_action( 'xprofile_data_after_save', 'xprofile_clear_fullname_cache_on_profile_field_edit' );220 191 221 192 /** -
trunk/tests/phpunit/testcases/members/functions.php
r11747 r11818 102 102 /** 103 103 * @group bp_core_get_user_displayname 104 * @group cache105 */106 public function test_bp_core_get_user_displayname_xprofile_populate_cache() {107 $xprofile_is_active = bp_is_active( 'xprofile' );108 buddypress()->active_components['xprofile'] = '1';109 110 $u = self::factory()->user->create( array(111 'display_name' => 'Foo',112 ) );113 bp_core_get_user_displayname( $u );114 115 $this->assertSame( 'Foo', wp_cache_get( 'bp_user_fullname_' . $u, 'bp' ) );116 117 if ( ! $xprofile_is_active ) {118 unset( buddypress()->active_components['xprofile'] );119 }120 }121 122 /**123 * @group bp_core_get_user_displayname124 * @group cache125 */126 public function test_bp_core_get_user_displayname_xprofile_bust_cache_after_xprofile_update() {127 $xprofile_is_active = bp_is_active( 'xprofile' );128 buddypress()->active_components['xprofile'] = '1';129 130 $u = self::factory()->user->create();131 xprofile_set_field_data( 1, $u, 'Foo Foo' );132 133 $this->assertFalse( wp_cache_get( 'bp_user_fullname_' . $u, 'bp' ) );134 135 if ( ! $xprofile_is_active ) {136 unset( buddypress()->active_components['xprofile'] );137 }138 }139 140 /**141 * @group bp_core_get_user_displayname142 104 */ 143 105 public function test_bp_core_get_user_displayname_xprofile_exists() { … … 156 118 157 119 /** 158 * @group bp_core_get_user_displayname159 */160 public function test_bp_core_get_user_displayname_xprofile_does_not_exist() {161 $bp = buddypress();162 $xprofile_is_active = bp_is_active( 'xprofile' );163 $bp->active_components['xprofile'] = '1';164 165 $u = self::factory()->user->create( array(166 'display_name' => 'Foo Foo',167 ) );168 169 // Delete directly because BP won't let you delete a required170 // field through the API171 global $wpdb;172 $wpdb->query( $wpdb->prepare( "DELETE FROM {$bp->profile->table_name_data} WHERE user_id = %d AND field_id = 1", $u ) );173 wp_cache_delete( 'bp_user_fullname_' . $u, 'bp' );174 wp_cache_delete( "{$u}:1", 'bp_xprofile_data' );175 176 $this->assertSame( '', xprofile_get_field_data( 1, $u ) );177 $this->assertSame( 'Foo Foo', bp_core_get_user_displayname( $u ) );178 $this->assertSame( 'Foo Foo', xprofile_get_field_data( 1, $u ) );179 180 if ( ! $xprofile_is_active ) {181 unset( $bp->active_components['xprofile'] );182 }183 }184 185 /**186 120 * @group bp_core_get_user_displaynames 187 121 */ … … 196 130 $u1 = self::factory()->user->create(); 197 131 $u2 = self::factory()->user->create(); 198 199 132 xprofile_set_field_data( 1, $u1, 'Foo' ); 200 133 xprofile_set_field_data( 1, $u2, 'Bar' ); … … 216 149 'display_name' => 'Bar', 217 150 ) ); 218 219 151 xprofile_set_field_data( 1, $u1, 'Foo' ); 220 221 // Delete directly because BP won't let you delete a required222 // field through the API223 global $wpdb;224 $bp = buddypress();225 $wpdb->query( $wpdb->prepare( "DELETE FROM {$bp->profile->table_name_data} WHERE user_id = %d AND field_id = 1", $u2 ) );226 wp_cache_delete( 'bp_user_fullname_' . $u2, 'bp' );227 wp_cache_delete( "{$u2}:1", 'bp_xprofile_data' );228 229 $expected = array(230 $u1 => 'Foo',231 $u2 => 'Bar',232 );233 234 $this->assertSame( $expected, bp_core_get_user_displaynames( array( $u1, $u2, ) ) );235 }236 237 /**238 * @group bp_core_get_user_displaynames239 */240 public function test_bp_core_get_user_displaynames_one_in_cache() {241 $u1 = self::factory()->user->create();242 xprofile_set_field_data( 1, $u1, 'Foo' );243 244 // Fake the cache for $u2245 $u2 = 123;246 wp_cache_set( 'bp_user_fullname_' . $u2, 'Bar', 'bp' );247 152 248 153 $expected = array(
Note: See TracChangeset
for help on using the changeset viewer.