Changeset 8119 for trunk/bp-members/bp-members-functions.php
- Timestamp:
- 03/13/2014 12:58:28 AM (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/bp-members/bp-members-functions.php
r8027 r8119 1362 1362 } 1363 1363 1364 // Check into signups 1365 $signups = BP_Signup::get( array( 1366 'user_login' => $user_name, 1367 ) ); 1368 1369 $signup = isset( $signups['signups'] ) && ! empty( $signups['signups'][0] ) ? $signups['signups'][0] : false; 1370 1364 1371 // Check if the username has been used already. 1365 if ( username_exists( $user_name ) ) {1372 if ( username_exists( $user_name ) || ! empty( $signup ) ) { 1366 1373 $errors->add( 'user_name', __( 'Sorry, that username already exists!', 'buddypress' ) ); 1367 1374 } … … 1394 1401 1395 1402 function bp_core_signup_user( $user_login, $user_password, $user_email, $usermeta ) { 1396 global $bp, $wpdb; 1403 global $bp; 1404 1405 // We need to cast $user_id to pass to the filters 1406 $user_id = false; 1397 1407 1398 1408 // Multisite installs have their own install procedure … … 1400 1410 wpmu_signup_user( $user_login, $user_email, $usermeta ); 1401 1411 1402 // On multisite, the user id is not created until the user activates the account1403 // but we need to cast $user_id to pass to the filters1404 $user_id = false;1405 1406 1412 } else { 1407 $errors = new WP_Error(); 1408 1409 $user_id = wp_insert_user( array( 1410 'user_login' => $user_login, 1411 'user_pass' => $user_password, 1412 'display_name' => sanitize_title( $user_login ), 1413 'user_email' => $user_email 1414 ) ); 1415 1416 if ( is_wp_error( $user_id ) || empty( $user_id ) ) { 1417 $errors->add( 'registerfail', sprintf( __('<strong>ERROR</strong>: Couldn’t register you... please contact the <a href="mailto:%s">webmaster</a> !', 'buddypress' ), bp_get_option( 'admin_email' ) ) ); 1418 return $errors; 1419 } 1420 1421 // Update the user status to '2' which we will use as 'not activated' (0 = active, 1 = spam, 2 = not active) 1422 $wpdb->query( $wpdb->prepare( "UPDATE {$wpdb->users} SET user_status = 2 WHERE ID = %d", $user_id ) ); 1423 1424 // Set any profile data 1425 if ( bp_is_active( 'xprofile' ) ) { 1426 if ( !empty( $usermeta['profile_field_ids'] ) ) { 1427 $profile_field_ids = explode( ',', $usermeta['profile_field_ids'] ); 1428 1429 foreach( (array) $profile_field_ids as $field_id ) { 1430 if ( empty( $usermeta["field_{$field_id}"] ) ) 1431 continue; 1432 1433 $current_field = $usermeta["field_{$field_id}"]; 1434 xprofile_set_field_data( $field_id, $user_id, $current_field ); 1435 1436 // Save the visibility level 1437 $visibility_level = !empty( $usermeta['field_' . $field_id . '_visibility'] ) ? $usermeta['field_' . $field_id . '_visibility'] : 'public'; 1438 xprofile_set_field_visibility_level( $field_id, $user_id, $visibility_level ); 1439 } 1413 // Format data 1414 $user_login = preg_replace( '/\s+/', '', sanitize_user( $user_login, true ) ); 1415 $user_email = sanitize_email( $user_email ); 1416 $activation_key = substr( md5( time() . rand() . $user_email ), 0, 16 ); 1417 1418 /** 1419 * WordPress's default behavior is to create user accounts 1420 * immediately at registration time. BuddyPress uses a system 1421 * borrowed from WordPress Multisite, where signups are stored 1422 * separately and accounts are only created at the time of 1423 * activation. For backward compatibility with plugins that may 1424 * be anticipating WP's default behavior, BP silently creates 1425 * accounts for registrations (though it does not use them). If 1426 * you know that you are not running any plugins dependent on 1427 * these pending accounts, you may want to save a little DB 1428 * clutter by defining setting the BP_SIGNUPS_SKIP_USER_CREATION 1429 * to true in your wp-config.php file. 1430 */ 1431 if ( ! defined( 'BP_SIGNUPS_SKIP_USER_CREATION' ) || ! BP_SIGNUPS_SKIP_USER_CREATION ) { 1432 $user_id = BP_Signup::add_backcompat( $user_login, $user_password, $user_email, $usermeta ); 1433 1434 if ( is_wp_error( $user_id ) ) { 1435 return $user_id; 1440 1436 } 1441 } 1442 } 1443 $bp->signup->username = $user_login; 1444 1445 /*** 1446 * Now generate an activation key and send an email to the user so they can activate their 1447 * account and validate their email address. Multisite installs send their own email, so 1448 * this is only for single blog installs. 1449 * 1450 * To disable sending activation emails you can user the filter 1451 * 'bp_core_signup_send_activation_key' and return false. Note that this will only disable 1452 * the email - a key will still be generated, and the account must still be activated 1453 * before use. 1454 */ 1455 if ( !is_multisite() ) { 1456 $activation_key = wp_hash( $user_id ); 1457 update_user_meta( $user_id, 'activation_key', $activation_key ); 1437 1438 $activation_key = wp_hash( $user_id ); 1439 update_user_meta( $user_id, 'activation_key', $activation_key ); 1440 } 1441 1442 $args = array( 1443 'user_login' => $user_login, 1444 'user_email' => $user_email, 1445 'activation_key' => $activation_key, 1446 'meta' => $usermeta, 1447 ); 1448 1449 BP_Signup::add( $args ); 1458 1450 1459 1451 if ( apply_filters( 'bp_core_signup_send_activation_key', true ) ) { … … 1461 1453 } 1462 1454 } 1455 1456 $bp->signup->username = $user_login; 1463 1457 1464 1458 do_action( 'bp_core_signup_user', $user_id, $user_login, $user_password, $user_email, $usermeta ); … … 1484 1478 1485 1479 // If there were errors, add a message and redirect 1486 if ( ! empty( $user->errors ) ) {1480 if ( ! empty( $user->errors ) ) { 1487 1481 return $user; 1488 1482 } … … 1490 1484 $user_id = $user['user_id']; 1491 1485 1492 // Set any profile data 1493 if ( bp_is_active( 'xprofile' ) ) { 1494 if ( !empty( $user['meta']['profile_field_ids'] ) ) { 1495 $profile_field_ids = explode( ',', $user['meta']['profile_field_ids'] ); 1496 1497 foreach( (array) $profile_field_ids as $field_id ) { 1498 $current_field = isset( $user['meta']["field_{$field_id}"] ) ? $user['meta']["field_{$field_id}"] : false; 1499 1500 if ( !empty( $current_field ) ) 1501 xprofile_set_field_data( $field_id, $user_id, $current_field ); 1502 1503 // Save the visibility level 1504 $visibility_level = !empty( $user['meta']['field_' . $field_id . '_visibility'] ) ? $user['meta']['field_' . $field_id . '_visibility'] : 'public'; 1505 xprofile_set_field_visibility_level( $field_id, $user_id, $visibility_level ); 1506 } 1486 } else { 1487 $signups = BP_Signup::get( array( 1488 'activation_key' => $key, 1489 ) ); 1490 1491 if ( empty( $signups['signups'] ) ) { 1492 return new WP_Error( 'invalid_key', __( 'Invalid activation key.', 'buddypress' ) ); 1493 } 1494 1495 $signup = $signups['signups'][0]; 1496 1497 if ( $signup->active ) { 1498 if ( empty( $signup->domain ) ) { 1499 return new WP_Error( 'already_active', __( 'The user is already active.', 'buddypress' ), $signup ); 1500 } else { 1501 return new WP_Error( 'already_active', __( 'The site is already active.', 'buddypress' ), $signup ); 1507 1502 } 1508 1503 } 1509 } else { 1510 1511 // Get the user_id based on the $key 1512 $user_id = $wpdb->get_var( $wpdb->prepare( "SELECT user_id FROM {$wpdb->usermeta} WHERE meta_key = 'activation_key' AND meta_value = %s", $key ) ); 1513 1514 if ( empty( $user_id ) ) 1515 return new WP_Error( 'invalid_key', __( 'Invalid activation key', 'buddypress' ) ); 1516 1517 // Change the user's status so they become active 1518 if ( !$wpdb->query( $wpdb->prepare( "UPDATE {$wpdb->users} SET user_status = 0 WHERE ID = %d", $user_id ) ) ) 1519 return new WP_Error( 'invalid_key', __( 'Invalid activation key', 'buddypress' ) ); 1504 1505 // password is hashed again in wp_insert_user 1506 $password = wp_generate_password( 12, false ); 1507 1508 $user_id = username_exists( $signup->user_login ); 1509 1510 // Create the user 1511 if ( ! $user_id ) { 1512 $user_id = wp_create_user( $signup->user_login, $password, $signup->user_email ); 1513 1514 // If a user ID is found, this may be a legacy signup, or one 1515 // created locally for backward compatibility. Process it. 1516 } else if ( $key == wp_hash( $user_id ) ) { 1517 // Change the user's status so they become active 1518 if ( ! $wpdb->query( $wpdb->prepare( "UPDATE {$wpdb->users} SET user_status = 0 WHERE ID = %d", $user_id ) ) ) { 1519 return new WP_Error( 'invalid_key', __( 'Invalid activation key', 'buddypress' ) ); 1520 } 1521 1522 bp_delete_user_meta( $user_id, 'activation_key' ); 1523 1524 $member = get_userdata( $user_id ); 1525 $member->set_role( get_option('default_role') ); 1526 1527 $user_already_created = true; 1528 1529 } else { 1530 $user_already_exists = true; 1531 } 1532 1533 if ( ! $user_id ) { 1534 return new WP_Error( 'create_user', __( 'Could not create user', 'buddypress' ), $signup ); 1535 } 1536 1537 // Fetch the signup so we have the data later on 1538 $signups = BP_Signup::get( array( 1539 'activation_key' => $key, 1540 ) ); 1541 1542 $signup = isset( $signups['signups'] ) && ! empty( $signups['signups'][0] ) ? $signups['signups'][0] : false; 1543 1544 // Activate the signup 1545 BP_Signup::validate( $key ); 1546 1547 if ( isset( $user_already_exists ) ) { 1548 return new WP_Error( 'user_already_exists', __( 'That username is already activated.' ), $signup ); 1549 } 1550 1551 // Set up data to pass to the legacy filter 1552 $user = array( 1553 'user_id' => $user_id, 1554 'password' => $signup->meta['password'], 1555 'meta' => $signup->meta, 1556 ); 1520 1557 1521 1558 // Notify the site admin of a new user registration 1522 1559 wp_new_user_notification( $user_id ); 1523 1560 1524 // Remove the activation key meta 1525 delete_user_meta( $user_id, 'activation_key' ); 1561 if ( isset( $user_already_created ) ) { 1562 do_action( 'bp_core_activated_user', $user_id, $key, $user ); 1563 return $user_id; 1564 } 1565 } 1566 1567 // Set any profile data 1568 if ( bp_is_active( 'xprofile' ) ) { 1569 if ( ! empty( $user['meta']['profile_field_ids'] ) ) { 1570 $profile_field_ids = explode( ',', $user['meta']['profile_field_ids'] ); 1571 1572 foreach( (array) $profile_field_ids as $field_id ) { 1573 $current_field = isset( $user['meta']["field_{$field_id}"] ) ? $user['meta']["field_{$field_id}"] : false; 1574 1575 if ( !empty( $current_field ) ) 1576 xprofile_set_field_data( $field_id, $user_id, $current_field ); 1577 1578 // Save the visibility level 1579 $visibility_level = ! empty( $user['meta']['field_' . $field_id . '_visibility'] ) ? $user['meta']['field_' . $field_id . '_visibility'] : 'public'; 1580 xprofile_set_field_visibility_level( $field_id, $user_id, $visibility_level ); 1581 } 1582 } 1526 1583 } 1527 1584 1528 1585 // Update the display_name 1529 wp_update_user( array( 'ID' => $user_id, 'display_name' => bp_core_get_user_displayname( $user_id ) ) ); 1586 wp_update_user( array( 1587 'ID' => $user_id, 1588 'display_name' => bp_core_get_user_displayname( $user_id ), 1589 ) ); 1530 1590 1531 1591 // Set the password on multisite installs 1532 if ( is_multisite() && !empty( $user['meta']['password'] ) )1592 if ( ! empty( $user['meta']['password'] ) ) { 1533 1593 $wpdb->query( $wpdb->prepare( "UPDATE {$wpdb->users} SET user_pass = %s WHERE ID = %d", $user['meta']['password'], $user_id ) ); 1594 } 1534 1595 1535 1596 do_action( 'bp_core_activated_user', $user_id, $key, $user );
Note: See TracChangeset
for help on using the changeset viewer.