Skip to content

Commit 9580f65

Browse files
committed
Allow passing stdClass and WP_User to wp_insert_user() and wp_update_user(). Introduce WP_User::to_array(). Eliminate uses of get_object_vars() when passing to wp_*_user(). fixes #21429
git-svn-id: https://develop.svn.wordpress.org/trunk@21496 602fd350-edb4-49c9-b593-d223f7449a82
1 parent d79594b commit 9580f65

4 files changed

Lines changed: 30 additions & 8 deletions

File tree

wp-admin/includes/user.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -156,9 +156,9 @@ function edit_user( $user_id = 0 ) {
156156
return $errors;
157157

158158
if ( $update ) {
159-
$user_id = wp_update_user( get_object_vars( $user ) );
159+
$user_id = wp_update_user( $user );
160160
} else {
161-
$user_id = wp_insert_user( get_object_vars( $user ) );
161+
$user_id = wp_insert_user( $user );
162162
wp_new_user_notification( $user_id, isset($_POST['send_password']) ? $pass1 : '' );
163163
}
164164
return $user_id;

wp-admin/user-edit.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,11 +82,12 @@ function use_ssl_preference($user) {
8282
if ( is_multisite() && IS_PROFILE_PAGE && isset( $_GET[ 'newuseremail' ] ) && $current_user->ID ) {
8383
$new_email = get_option( $current_user->ID . '_new_email' );
8484
if ( $new_email[ 'hash' ] == $_GET[ 'newuseremail' ] ) {
85+
$user = new stdClass;
8586
$user->ID = $current_user->ID;
8687
$user->user_email = esc_html( trim( $new_email[ 'newemail' ] ) );
8788
if ( $wpdb->get_var( $wpdb->prepare( "SELECT user_login FROM {$wpdb->signups} WHERE user_login = %s", $current_user->user_login ) ) )
8889
$wpdb->query( $wpdb->prepare( "UPDATE {$wpdb->signups} SET user_email = %s WHERE user_login = %s", $user->user_email, $current_user->user_login ) );
89-
wp_update_user( get_object_vars( $user ) );
90+
wp_update_user( $user );
9091
delete_option( $current_user->ID . '_new_email' );
9192
wp_redirect( add_query_arg( array('updated' => 'true'), self_admin_url( 'profile.php' ) ) );
9293
die();

wp-includes/capabilities.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -665,6 +665,17 @@ function has_prop( $key ) {
665665
return $this->__isset( $key );
666666
}
667667

668+
/*
669+
* Return an array representation.
670+
*
671+
* @since 3.5.0
672+
*
673+
* @return array Array representation.
674+
*/
675+
function to_array() {
676+
return get_object_vars( $this->data );
677+
}
678+
668679
/**
669680
* Set up capability object properties.
670681
*

wp-includes/user.php

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1240,13 +1240,18 @@ function validate_username( $username ) {
12401240
* @uses do_action() Calls 'profile_update' hook when updating giving the user's ID
12411241
* @uses do_action() Calls 'user_register' hook when creating a new user giving the user's ID
12421242
*
1243-
* @param array $userdata An array of user data.
1243+
* @param mixed $userdata An array of user data or a user object of type stdClass or WP_User.
12441244
* @return int|WP_Error The newly created user's ID or a WP_Error object if the user could not be created.
12451245
*/
1246-
function wp_insert_user($userdata) {
1246+
function wp_insert_user( $userdata ) {
12471247
global $wpdb;
12481248

1249-
extract($userdata, EXTR_SKIP);
1249+
if ( is_a( $userdata, 'stdClass' ) )
1250+
$userdata = get_object_vars( $userdata );
1251+
elseif ( is_a( $userdata, 'WP_User' ) )
1252+
$userdata = $userdata->to_array();
1253+
1254+
extract( $userdata, EXTR_SKIP );
12501255

12511256
// Are we updating or creating?
12521257
if ( !empty($ID) ) {
@@ -1387,16 +1392,21 @@ function wp_insert_user($userdata) {
13871392
* @see wp_insert_user() For what fields can be set in $userdata
13881393
* @uses wp_insert_user() Used to update existing user or add new one if user doesn't exist already
13891394
*
1390-
* @param array $userdata An array of user data.
1395+
* @param mixed $userdata An array of user data or a user object of type stdClass or WP_User.
13911396
* @return int The updated user's ID.
13921397
*/
13931398
function wp_update_user($userdata) {
1399+
if ( is_a( $userdata, 'stdClass' ) )
1400+
$userdata = get_object_vars( $userdata );
1401+
elseif ( is_a( $userdata, 'WP_User' ) )
1402+
$userdata = $userdata->to_array();
1403+
13941404
$ID = (int) $userdata['ID'];
13951405

13961406
// First, get all of the original fields
13971407
$user_obj = get_userdata( $ID );
13981408

1399-
$user = get_object_vars( $user_obj->data );
1409+
$user = $user_obj->to_array();
14001410

14011411
// Add additional custom fields
14021412
foreach ( _get_additional_user_keys( $user_obj ) as $key ) {

0 commit comments

Comments
 (0)