From 62edf14893844b53ebb51a107be6007d3a19a3c9 Mon Sep 17 00:00:00 2001 From: snipe Date: Tue, 13 Feb 2018 20:31:11 -0800 Subject: [PATCH] Refactored method to generate usernames from full names --- app/Models/User.php | 42 ++++++++++---------------------------- tests/unit/UserTest.php | 45 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+), 31 deletions(-) diff --git a/app/Models/User.php b/app/Models/User.php index 8fbbac9cfa..60d24e9d2a 100755 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -330,44 +330,24 @@ class User extends SnipeModel implements AuthenticatableContract, CanResetPasswo public static function generateFormattedNameFromFullName($format = 'filastname', $users_name) { - $name = explode(" ", $users_name); - $name = str_replace("'", '', $name); - $first_name = $name[0]; - $email_last_name = ''; - $email_prefix = $first_name; + list($first_name, $last_name) = explode(" ", $users_name, 2); - // If there is no last name given - if (!array_key_exists(1, $name)) { - $last_name=''; - $email_last_name = $last_name; - $user_username = $first_name; - - // There is a last name given - } else { - - $last_name = str_replace($first_name . ' ', '', $users_name); - - if ($format=='filastname') { - $email_last_name.=str_replace(' ', '', $last_name); - $email_prefix = $first_name[0].$email_last_name; - - } elseif ($format=='firstname.lastname') { - $email_last_name.=str_replace(' ', '', $last_name); - $email_prefix = $first_name.'.'.$email_last_name; - - } elseif ($format=='firstname') { - $email_last_name.=str_replace(' ', '', $last_name); - $email_prefix = $first_name; - } + // Assume filastname by default + $username = str_slug(substr($first_name, 0, 1).$last_name); + + if ($format=='firstname.lastname') { + $username = str_slug($first_name).'.'.str_slug($last_name); + } elseif ($format=='firstname_lastname') { + $username = str_slug($first_name).'_'.str_slug($last_name); + } elseif ($format=='firstname') { + $username = str_slug($first_name); } - $user_username = $email_prefix; $user['first_name'] = $first_name; $user['last_name'] = $last_name; - $user['username'] = strtolower($user_username); - + $user['username'] = strtolower($username); return $user; diff --git a/tests/unit/UserTest.php b/tests/unit/UserTest.php index dd515d0cef..547f7d8f70 100644 --- a/tests/unit/UserTest.php +++ b/tests/unit/UserTest.php @@ -27,4 +27,49 @@ class UserTest extends BaseTest $this->tester->seeRecord('users', $values); } + + public function testFirstNameSplit() + { + $fullname = "Natalia Allanovna Romanova-O'Shostakova"; + $expected_firstname = 'Natalia'; + $expected_lastname = "Allanovna Romanova-O'Shostakova"; + $user = User::generateFormattedNameFromFullName('firstname', $fullname); + $this->assertEquals($expected_firstname, $user['first_name']); + $this->assertEquals($expected_lastname, $user['last_name']); + } + + public function testFirstName() + { + $fullname = "Natalia Allanovna Romanova-O'Shostakova"; + $expected_username = 'natalia'; + $user = User::generateFormattedNameFromFullName('firstname', $fullname); + $this->assertEquals($expected_username, $user['username']); + } + + public function testFirstNameDotLastName() + { + $fullname = "Natalia Allanovna Romanova-O'Shostakova"; + $expected_username = 'natalia.allanovna-romanova-oshostakova'; + $user = User::generateFormattedNameFromFullName('firstname.lastname', $fullname); + $this->assertEquals($expected_username, $user['username']); + } + + + public function testFirstInitialLastName() + { + $fullname = "Natalia Allanovna Romanova-O'Shostakova"; + $expected_username = 'nallanovna-romanova-oshostakova'; + $user = User::generateFormattedNameFromFullName('filastname', $fullname); + $this->assertEquals($expected_username, $user['username']); + } + + public function testFirstInitialUnderscoreLastName() + { + $fullname = "Natalia Allanovna Romanova-O'Shostakova"; + $expected_username = 'natalia_allanovna-romanova-oshostakova'; + $user = User::generateFormattedNameFromFullName('firstname_lastname', $fullname); + $this->assertEquals($expected_username, $user['username']); + } + + }