From ad4908557103618b4f7a33724edfde25a40f04c5 Mon Sep 17 00:00:00 2001 From: Mike Jolley Date: Wed, 27 Mar 2019 12:22:15 +0000 Subject: [PATCH] Append random number to reduce recusion --- includes/wc-user-functions.php | 8 +++++--- tests/unit-tests/customer/functions.php | 10 +++++++--- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/includes/wc-user-functions.php b/includes/wc-user-functions.php index 0aa5030c1f5..4932b66f998 100644 --- a/includes/wc-user-functions.php +++ b/includes/wc-user-functions.php @@ -114,10 +114,10 @@ if ( ! function_exists( 'wc_create_new_customer' ) ) { * @since 3.6.0 * @param string $email New customer email address. * @param array $new_user_args Array of new user args, maybe including first and last names. - * @param int $suffix Append number to username to make it more unique. + * @param string $suffix Append string to username to make it unique. * @return string Generated username. */ -function wc_create_new_customer_username( $email, $new_user_args, $suffix = 0 ) { +function wc_create_new_customer_username( $email, $new_user_args, $suffix = '' ) { $username_parts = array(); if ( isset( $new_user_args['first_name'] ) ) { @@ -162,7 +162,9 @@ function wc_create_new_customer_username( $email, $new_user_args, $suffix = 0 ) } if ( username_exists( $username ) ) { - return wc_create_new_customer_username( $email, $new_user_args, ++$suffix ); + // Generate something unique to append to the username in case of a conflict with another user. + $suffix = '-' . zeroise( wp_rand( 0, 9999 ), 4 ); + return wc_create_new_customer_username( $email, $new_user_args, $suffix ); } return $username; diff --git a/tests/unit-tests/customer/functions.php b/tests/unit-tests/customer/functions.php index 3bf53b3607c..f8a441a5082 100644 --- a/tests/unit-tests/customer/functions.php +++ b/tests/unit-tests/customer/functions.php @@ -44,10 +44,12 @@ class WC_Tests_Customer_Functions extends WC_Unit_Test_Case { $this->assertEquals( 'fred', $userdata->user_login ); $id = wc_create_new_customer( 'fred@mail.com', '', 'testpassword' ); $userdata = get_userdata( $id ); - $this->assertEquals( 'fred1', $userdata->user_login ); + $this->assertNotEquals( 'fred', $userdata->user_login ); + $this->assertContains( 'fred', $userdata->user_login ); $id = wc_create_new_customer( 'fred@test.com', '', 'testpassword' ); $userdata = get_userdata( $id ); - $this->assertEquals( 'fred2', $userdata->user_login ); + $this->assertNotEquals( 'fred', $userdata->user_login ); + $this->assertContains( 'fred', $userdata->user_login ); // Test extra arguments to generate display_name. $id = wc_create_new_customer( @@ -82,7 +84,9 @@ class WC_Tests_Customer_Functions extends WC_Unit_Test_Case { // Test getting name if username exists. wc_create_new_customer( 'mike@fakemail.com', '', 'testpassword' ); - $this->assertEquals( 'mike1', wc_create_new_customer_username( 'mike@fakemail.com', array() ) ); + $username = wc_create_new_customer_username( 'mike@fakemail.com', array() ); + $this->assertNotEquals( 'mike', $username, $username ); + $this->assertContains( 'mike', $username, $username ); // Test common email prefix avoidance. $this->assertEquals( 'somecompany.com', wc_create_new_customer_username( 'info@somecompany.com', array() ) );