Merge pull request #16637 from akemidx/lastnameemail

Fixed #8188 - Added Last Name as an email format
This commit is contained in:
snipe 2025-04-09 21:27:10 +01:00 committed by GitHub
commit 9c88aa6974
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 82 additions and 54 deletions

View file

@ -622,6 +622,8 @@ class User extends SnipeModel implements AuthenticatableContract, AuthorizableCo
$username = str_slug($first_name).'_'.str_slug($last_name); $username = str_slug($first_name).'_'.str_slug($last_name);
} elseif ($format == 'firstname') { } elseif ($format == 'firstname') {
$username = str_slug($first_name); $username = str_slug($first_name);
} elseif ($format == 'lastname') {
$username = str_slug($last_name);
} elseif ($format == 'firstinitial.lastname') { } elseif ($format == 'firstinitial.lastname') {
$username = str_slug(substr($first_name, 0, 1).'.'.str_slug($last_name)); $username = str_slug(substr($first_name, 0, 1).'.'.str_slug($last_name));
} elseif ($format == 'lastname_firstinitial') { } elseif ($format == 'lastname_firstinitial') {

View file

@ -396,17 +396,38 @@ return [
'due_checkin_days_help' => 'How many days before the expected checkin of an asset should it be listed in the "Due for checkin" page?', 'due_checkin_days_help' => 'How many days before the expected checkin of an asset should it be listed in the "Due for checkin" page?',
'no_groups' => 'No groups have been created yet. Visit <code>Admin Settings > Permission Groups</code> to add one.', 'no_groups' => 'No groups have been created yet. Visit <code>Admin Settings > Permission Groups</code> to add one.',
'text' => 'Text', 'text' => 'Text',
'firstname_lastname_format' => 'First Name Last Name (jane.smith)',
'first_name_format' => 'First Name (jane)', 'username_formats' => [
'filastname_format' => 'First Initial Last Name (jsmith)', 'username_format' => 'Username Format',
'lastnamefirstinitial_format' => 'Last Name First Initial (smithj)', 'firstname_lastname_format' => 'First Name Last Name (jane.smith)',
'firstname_lastname_underscore_format' => 'First Name Last Name (jane_smith)', 'first_name_format' => 'First Name (jane)',
'firstinitial.lastname' => 'First Initial Last Name (j.smith)', 'last_name_format' => 'Last Name (doe)',
'lastname_firstinitial' => 'Last Name First Initial (smith_j)', 'filastname_format' => 'First Initial Last Name (jsmith)',
'lastname_dot_firstinitial_format' => 'Last Name First Initial (smith.j)', 'lastnamefirstinitial_format' => 'Last Name First Initial (smithj)',
'firstnamelastname' => 'First Name Last Name (janesmith)', 'firstname_lastname_underscore_format' => 'First Name Last Name (jane_smith)',
'firstnamelastinitial' => 'First Name Last Initial (janes)', 'firstinitial.lastname' => 'First Initial Last Name (j.smith)',
'lastnamefirstname' => 'Last Name.First Name (smith.jane)', 'lastname_firstinitial' => 'Last Name First Initial (smith_j)',
'lastname_dot_firstinitial_format' => 'Last Name First Initial (smith.j)',
'firstnamelastname' => 'First Name Last Name (janesmith)',
'firstnamelastinitial' => 'First Name Last Initial (janes)',
'lastnamefirstname' => 'Last Name.First Name (smith.jane)',
],
'email_formats' => [
'email_format' => 'Email Format',
'firstname_lastname_format' => 'First Name Last Name (jane.smith@example.com)',
'first_name_format' => 'First Name (jane@example.com)',
'last_name_format' => 'Last Name (doe@example.com)',
'filastname_format' => 'First Initial Last Name (jsmith@example.com)',
'lastnamefirstinitial_format' => 'Last Name First Initial (smithj@example.com)',
'firstname_lastname_underscore_format' => 'First Name Last Name (jane_smith@example.com)',
'firstinitial.lastname' => 'First Initial Last Name (j.smith@example.com)',
'lastname_firstinitial' => 'Last Name First Initial (smith_j@example.com)',
'lastname_dot_firstinitial_format' => 'Last Name First Initial (smith.j@example.com)',
'firstnamelastname' => 'First Name Last Name (janesmith@example.com)',
'firstnamelastinitial' => 'First Name Last Initial (janes@example.com)',
'lastnamefirstname' => 'Last Name.First Name (smith.jane@example.com)',
],

View file

@ -121,30 +121,13 @@ return [
'editprofile' => 'Edit Your Profile', 'editprofile' => 'Edit Your Profile',
'eol' => 'EOL', 'eol' => 'EOL',
'email_domain' => 'Email Domain', 'email_domain' => 'Email Domain',
'email_format' => 'Email Format',
'employee_number' => 'Employee Number', 'employee_number' => 'Employee Number',
'email_domain_help' => 'This is used to generate email addresses when importing', 'email_domain_help' => 'This is used to generate email addresses when importing',
'error' => 'Error', 'error' => 'Error',
'exclude_archived' => 'Exclude Archived Assets', 'exclude_archived' => 'Exclude Archived Assets',
'exclude_deleted' => 'Exclude Deleted Assets', 'exclude_deleted' => 'Exclude Deleted Assets',
'example' => 'Example: ', 'example' => 'Example: ',
'filastname_format' => 'First Initial Last Name (jsmith@example.com)',
'firstname_lastname_format' => 'First Name Last Name (jane.smith@example.com)',
'firstname_lastname_underscore_format' => 'First Name Last Name (jane_smith@example.com)',
'lastnamefirstinitial_format' => 'Last Name First Initial (smithj@example.com)',
'firstintial_dot_lastname_format' => 'First Initial Last Name (j.smith@example.com)',
'lastname_dot_firstinitial_format' => 'Last Name First Initial (smith.j@example.com)',
'firstname_lastname_display' => 'First Name Last Name (Jane Smith)',
'lastname_firstname_display' => 'Last Name First Name (Smith Jane)',
'name_display_format' => 'Name Display Format',
'first' => 'First',
'firstnamelastname' => 'First Name Last Name (janesmith@example.com)',
'lastname_firstinitial' => 'Last Name First Initial (smith_j@example.com)',
'firstinitial.lastname' => 'First Initial Last Name (j.smith@example.com)',
'firstnamelastinitial' => 'First Name Last Initial (janes@example.com)',
'lastnamefirstname' => 'Last Name.First Name (smith.jane@example.com)',
'first_name' => 'First Name',
'first_name_format' => 'First Name (jane@example.com)',
'files' => 'Files', 'files' => 'Files',
'file_name' => 'File', 'file_name' => 'File',
'file_type' => 'File Type', 'file_type' => 'File Type',
@ -186,6 +169,11 @@ return [
'last' => 'Last', 'last' => 'Last',
'last_login' => 'Last Login', 'last_login' => 'Last Login',
'last_name' => 'Last Name', 'last_name' => 'Last Name',
'firstname_lastname_display' => 'First Name Last Name (Jane Smith)',
'lastname_firstname_display' => 'Last Name First Name (Smith Jane)',
'name_display_format' => 'Name Display Format',
'first' => 'First',
'first_name' => 'First Name',
'license' => 'License', 'license' => 'License',
'license_report' => 'License Report', 'license_report' => 'License Report',
'licenses_available' => 'Licenses available', 'licenses_available' => 'Licenses available',
@ -314,7 +302,6 @@ return [
'type' => 'Type', 'type' => 'Type',
'undeployable' => 'Un-deployable', 'undeployable' => 'Un-deployable',
'unknown_admin' => 'Unknown Admin', 'unknown_admin' => 'Unknown Admin',
'username_format' => 'Username Format',
'username' => 'Username', 'username' => 'Username',
'update' => 'Update', 'update' => 'Update',
'updating_item' => 'Updating :item', 'updating_item' => 'Updating :item',

View file

@ -191,17 +191,18 @@ Form::macro('barcode_types', function ($name = 'barcode_type', $selected = null,
Form::macro('email_format', function ($name = 'email_format', $selected = null, $class = null) { Form::macro('email_format', function ($name = 'email_format', $selected = null, $class = null) {
$formats = [ $formats = [
'firstname.lastname' => trans('general.firstname_lastname_format'), 'firstname.lastname' => trans('admin/settings/general.email_formats.firstname_lastname_format'),
'firstname' => trans('general.first_name_format'), 'firstname' => trans('admin/settings/general.email_formats.first_name_format'),
'filastname' => trans('general.filastname_format'), 'lastname' => trans('admin/settings/general.email_formats.last_name_format'),
'lastnamefirstinitial' => trans('general.lastnamefirstinitial_format'), 'filastname' => trans('admin/settings/general.email_formats.filastname_format'),
'firstname_lastname' => trans('general.firstname_lastname_underscore_format'), 'lastnamefirstinitial' => trans('admin/settings/general.email_formats.lastnamefirstinitial_format'),
'firstinitial.lastname' => trans('general.firstinitial.lastname'), 'firstname_lastname' => trans('admin/settings/general.email_formats.firstname_lastname_underscore_format'),
'lastname_firstinitial' => trans('general.lastname_firstinitial'), 'firstinitial.lastname' => trans('admin/settings/general.email_formats.firstinitial.lastname'),
'lastname.firstinitial' => trans('general.lastname_dot_firstinitial_format'), 'lastname_firstinitial' => trans('admin/settings/general.email_formats.lastname_firstinitial'),
'firstnamelastname' => trans('general.firstnamelastname'), 'lastname.firstinitial' => trans('admin/settings/general.email_formats.lastname_dot_firstinitial_format'),
'firstnamelastinitial' => trans('general.firstnamelastinitial'), 'firstnamelastname' => trans('admin/settings/general.email_formats.firstnamelastname'),
'lastname.firstname' => trans('general.lastnamefirstname'), 'firstnamelastinitial' => trans('admin/settings/general.email_formats.firstnamelastinitial'),
'lastname.firstname' => trans('admin/settings/general.email_formats.lastnamefirstname'),
]; ];
$select = '<select name="'.$name.'" class="'.$class.'" style="width: 100%" aria-label="'.$name.'">'; $select = '<select name="'.$name.'" class="'.$class.'" style="width: 100%" aria-label="'.$name.'">';
@ -216,17 +217,18 @@ Form::macro('email_format', function ($name = 'email_format', $selected = null,
Form::macro('username_format', function ($name = 'username_format', $selected = null, $class = null) { Form::macro('username_format', function ($name = 'username_format', $selected = null, $class = null) {
$formats = [ $formats = [
'firstname.lastname' => trans('admin/settings/general.firstname_lastname_format'), 'firstname.lastname' => trans('admin/settings/general.username_formats.firstname_lastname_format'),
'firstname' => trans('admin/settings/general.first_name_format'), 'firstname' => trans('admin/settings/general.username_formats.first_name_format'),
'filastname' => trans('admin/settings/general.filastname_format'), 'lastname' => trans('admin/settings/general.username_formats.last_name_format'),
'lastnamefirstinitial' => trans('admin/settings/general.lastnamefirstinitial_format'), 'filastname' => trans('admin/settings/general.username_formats.filastname_format'),
'firstname_lastname' => trans('admin/settings/general.firstname_lastname_underscore_format'), 'lastnamefirstinitial' => trans('admin/settings/general.username_formats.lastnamefirstinitial_format'),
'firstinitial.lastname' => trans('admin/settings/general.firstinitial.lastname'), 'firstname_lastname' => trans('admin/settings/general.username_formats.firstname_lastname_underscore_format'),
'lastname_firstinitial' => trans('admin/settings/general.lastname_firstinitial'), 'firstinitial.lastname' => trans('admin/settings/general.username_formats.firstinitial.lastname'),
'lastname.firstinitial' => trans('admin/settings/general.lastname_dot_firstinitial_format'), 'lastname_firstinitial' => trans('admin/settings/general.username_formats.lastname_firstinitial'),
'firstnamelastname' => trans('admin/settings/general.firstnamelastname'), 'lastname.firstinitial' => trans('admin/settings/general.username_formats.lastname_dot_firstinitial_format'),
'firstnamelastinitial' => trans('admin/settings/general.firstnamelastinitial'), 'firstnamelastname' => trans('admin/settings/general.username_formats.firstnamelastname'),
'lastname.firstname' => trans('admin/settings/general.lastnamefirstname'), 'firstnamelastinitial' => trans('admin/settings/general.username_formats.firstnamelastinitial'),
'lastname.firstname' => trans('admin/settings/general.username_formats.lastnamefirstname'),
]; ];
$select = '<select name="'.$name.'" class="'.$class.'" style="width: 100%" aria-label="'.$name.'">'; $select = '<select name="'.$name.'" class="'.$class.'" style="width: 100%" aria-label="'.$name.'">';

View file

@ -107,7 +107,7 @@
<!-- Email format --> <!-- Email format -->
<div class="form-group {{ $errors->has('email_format') ? 'error' : '' }}"> <div class="form-group {{ $errors->has('email_format') ? 'error' : '' }}">
<div class="col-md-3"> <div class="col-md-3">
<label for="email_format">{{ trans('general.email_format') }}</label> <label for="email_format">{{ trans('admin/settings/general.email_formats.email_format') }}</label>
</div> </div>
<div class="col-md-9"> <div class="col-md-9">
{!! Form::email_format('email_format', old('email_format', $setting->email_format), 'select2') !!} {!! Form::email_format('email_format', old('email_format', $setting->email_format), 'select2') !!}
@ -118,7 +118,7 @@
<!-- Username format --> <!-- Username format -->
<div class="form-group {{ $errors->has('username_format') ? 'error' : '' }}"> <div class="form-group {{ $errors->has('username_format') ? 'error' : '' }}">
<div class="col-md-3"> <div class="col-md-3">
<label for="username_format">{{ trans('general.username_format') }}</label> <label for="username_format">{{ trans('admin/settings/general.username_formats.username_format') }}</label>
</div> </div>
<div class="col-md-9"> <div class="col-md-9">
{!! Form::username_format('username_format', old('username_format', $setting->username_format), 'select2') !!} {!! Form::username_format('username_format', old('username_format', $setting->username_format), 'select2') !!}

View file

@ -32,6 +32,22 @@ class UserTest extends TestCase
$this->assertEquals($expected_email, $user['username'] . '@example.com'); $this->assertEquals($expected_email, $user['username'] . '@example.com');
} }
public function testLastName()
{
$fullname = "Natalia Allanovna Romanova-O'Shostakova";
$expected_username = 'allanovna-romanova-oshostakova';
$user = User::generateFormattedNameFromFullName($fullname, 'lastname');
$this->assertEquals($expected_username, $user['username']);
}
public function testLastNameEmail()
{
$fullname = "Natalia Allanovna Romanova-O'Shostakova";
$expected_username = 'allanovna-romanova-oshostakova@example.com';
$user = User::generateFormattedNameFromFullName($fullname, 'lastname');
$this->assertEquals($expected_username, $user['username'] . '@example.com');
}
public function testFirstNameDotLastName() public function testFirstNameDotLastName()
{ {
$fullname = "Natalia Allanovna Romanova-O'Shostakova"; $fullname = "Natalia Allanovna Romanova-O'Shostakova";