Ticket #5553: 5553.07.diff
File 5553.07.diff, 6.8 KB (added by , 11 years ago) |
---|
-
bp-core/bp-core-update.php
diff --git bp-core/bp-core-update.php bp-core/bp-core-update.php index cc9dd70..940d0dc 100644
function bp_update_to_2_0() { 365 365 // Maybe install the signups table 366 366 bp_core_maybe_install_signups(); 367 367 368 $signups = get_users( array( 369 'fields' => 'all_with_meta', 370 'meta_key' => 'activation_key', 371 'meta_compare' => 'EXISTS', 372 ) ); 373 374 if ( empty( $signups ) ) { 375 return; 376 } 377 378 foreach ( $signups as $signup ) { 379 $meta = array(); 380 381 if ( bp_is_active( 'xprofile' ) ) { 382 $meta['field_1'] = $signup->display_name; 383 } 384 385 $meta['password'] = $signup->user_pass; 386 387 $user_login = preg_replace( '/\s+/', '', sanitize_user( $signup->user_login, true ) ); 388 $user_email = sanitize_email( $signup->user_email ); 389 390 BP_Signup::add( array( 391 'user_login' => $user_login, 392 'user_email' => $user_email, 393 'registered' => $signup->user_registered, 394 'activation_key' => $signup->activation_key, 395 'meta' => $meta 396 ) ); 397 398 // Deleting these options will remove signups from users count 399 delete_user_option( $signup->ID, 'capabilities' ); 400 delete_user_option( $signup->ID, 'user_level' ); 401 } 368 // Run the migration script 369 bp_members_migrate_signups(); 402 370 } 403 371 404 372 /** Add BP options to the options table ***********************************/ -
bp-members/bp-members-functions.php
diff --git bp-members/bp-members-functions.php bp-members/bp-members-functions.php index 6dbe403..9e47ef2 100644
function bp_core_activate_signup( $key ) { 1637 1637 return $user_id; 1638 1638 } 1639 1639 1640 /** 1641 * Migrate signups from pre-2.0 configuration to wp_signups. 1642 * 1643 * @since BuddyPress (2.0.1) 1644 */ 1645 function bp_members_migrate_signups() { 1646 global $wpdb; 1647 1648 $status_2_ids = $wpdb->get_col( "SELECT ID FROM {$wpdb->users} WHERE user_status = '2'" ); 1649 1650 if ( ! empty( $status_2_ids ) ) { 1651 $signups = get_users( array( 1652 'fields' => array( 1653 'ID', 1654 'user_login', 1655 'user_pass', 1656 'user_registered', 1657 'user_email', 1658 'display_name', 1659 ), 1660 'include' => $status_2_ids, 1661 ) ); 1662 1663 // Fetch activation keys separately, to avoid the all_with_meta 1664 // overhead 1665 $status_2_ids_sql = implode( ',', $status_2_ids ); 1666 $ak_data = $wpdb->get_results( "SELECT user_id, meta_value FROM {$wpdb->usermeta} WHERE meta_key = 'activation_key' AND user_id IN ({$status_2_ids_sql})" ); 1667 1668 // Rekey 1669 $activation_keys = array(); 1670 foreach ( $ak_data as $ak_datum ) { 1671 $activation_keys[ intval( $ak_datum->user_id ) ] = $ak_datum->meta_value; 1672 } 1673 1674 unset( $status_2_ids_sql, $status_2_ids, $ak_data ); 1675 1676 // Merge 1677 foreach ( $signups as &$signup ) { 1678 if ( isset( $activation_keys[ $signup->ID ] ) ) { 1679 $signup->activation_key = $activation_keys[ $signup->ID ]; 1680 } 1681 } 1682 1683 } else { 1684 return; 1685 } 1686 1687 foreach ( $signups as $signup ) { 1688 $meta = array(); 1689 1690 // Rebuild the activation key, if missing 1691 if ( empty( $signup->activation_key ) ) { 1692 $signup->activation_key = wp_hash( $signup->ID ); 1693 } 1694 1695 if ( bp_is_active( 'xprofile' ) ) { 1696 $meta['field_1'] = $signup->display_name; 1697 } 1698 1699 $meta['password'] = $signup->user_pass; 1700 1701 $user_login = preg_replace( '/\s+/', '', sanitize_user( $signup->user_login, true ) ); 1702 $user_email = sanitize_email( $signup->user_email ); 1703 1704 BP_Signup::add( array( 1705 'user_login' => $user_login, 1706 'user_email' => $user_email, 1707 'registered' => $signup->user_registered, 1708 'activation_key' => $signup->activation_key, 1709 'meta' => $meta 1710 ) ); 1711 1712 // Deleting these options will remove signups from users count 1713 delete_user_option( $signup->ID, 'capabilities' ); 1714 delete_user_option( $signup->ID, 'user_level' ); 1715 } 1716 } 1717 1640 1718 function bp_core_new_user_activity( $user ) { 1641 1719 if ( empty( $user ) || !bp_is_active( 'activity' ) ) 1642 1720 return false; -
tests/testcases/members/functions.php
diff --git tests/testcases/members/functions.php tests/testcases/members/functions.php index 4444ccc..b3fe270 100644
class BP_Tests_Members_Functions extends BP_UnitTestCase { 279 279 280 280 $this->assertSame( $expected, bp_core_get_user_displaynames( array( $u1, $u2, ) ) ); 281 281 } 282 283 /** 284 * @group bp_members_migrate_signups 285 */ 286 public function test_bp_members_migrate_signups_standard() { 287 $u = $this->create_user(); 288 $u_obj = new WP_User( $u ); 289 290 // Fake an old-style registration 291 $key = substr( md5( time() . rand() . $u_obj->user_email ), 0, 16 ); 292 update_user_meta( $u, 'activation_key', $key ); 293 294 global $wpdb; 295 $wpdb->update( 296 $wpdb->users, 297 array( 'user_status' => '2', ), 298 array( 'ID' => $u, ), 299 array( '%d', ), 300 array( '%d', ) 301 ); 302 clean_user_cache( $u ); 303 304 bp_members_migrate_signups(); 305 306 $found = BP_Signup::get(); 307 308 // Use email address as a sanity check 309 $found_email = isset( $found['signups'][0]->user_email ) ? $found['signups'][0]->user_email : ''; 310 $this->assertSame( $u_obj->user_email, $found_email ); 311 312 // Check that activation keys match 313 $found_key = isset( $found['signups'][0]->activation_key ) ? $found['signups'][0]->activation_key : ''; 314 $this->assertSame( $key, $found_key ); 315 } 316 317 /** 318 * @group bp_members_migrate_signups 319 */ 320 public function test_bp_members_migrate_signups_activation_key_but_user_status_0() { 321 $u = $this->create_user(); 322 $u_obj = new WP_User( $u ); 323 324 // Fake an old-style registration 325 $key = substr( md5( time() . rand() . $u_obj->user_email ), 0, 16 ); 326 update_user_meta( $u, 'activation_key', $key ); 327 328 // ...but ensure that user_status is 0. This mimics the 329 // behavior of certain plugins that disrupt the BP registration 330 // flow 331 global $wpdb; 332 $wpdb->update( 333 $wpdb->users, 334 array( 'user_status' => '0', ), 335 array( 'ID' => $u, ), 336 array( '%d', ), 337 array( '%d', ) 338 ); 339 clean_user_cache( $u ); 340 341 bp_members_migrate_signups(); 342 343 // No migrations should have taken place 344 $found = BP_Signup::get(); 345 $this->assertEmpty( $found['total'] ); 346 } 347 348 /** 349 * @group bp_members_migrate_signups 350 */ 351 public function test_bp_members_migrate_signups_no_activation_key_but_user_status_2() { 352 $u = $this->create_user(); 353 $u_obj = new WP_User( $u ); 354 355 // Fake an old-style registration but without an activation key 356 global $wpdb; 357 $wpdb->update( 358 $wpdb->users, 359 array( 'user_status' => '2', ), 360 array( 'ID' => $u, ), 361 array( '%d', ), 362 array( '%d', ) 363 ); 364 clean_user_cache( $u ); 365 366 bp_members_migrate_signups(); 367 368 // Use email address as a sanity check 369 $found = BP_Signup::get(); 370 $found_email = isset( $found['signups'][0]->user_email ) ? $found['signups'][0]->user_email : ''; 371 $this->assertSame( $u_obj->user_email, $found_email ); 372 } 282 373 }