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);
} elseif ($format == 'firstname') {
$username = str_slug($first_name);
} elseif ($format == 'lastname') {
$username = str_slug($last_name);
} elseif ($format == 'firstinitial.lastname') {
$username = str_slug(substr($first_name, 0, 1).'.'.str_slug($last_name));
} elseif ($format == 'lastname_firstinitial') {

View file

@ -396,8 +396,12 @@ 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?',
'no_groups' => 'No groups have been created yet. Visit <code>Admin Settings > Permission Groups</code> to add one.',
'text' => 'Text',
'username_formats' => [
'username_format' => 'Username Format',
'firstname_lastname_format' => 'First Name Last Name (jane.smith)',
'first_name_format' => 'First Name (jane)',
'last_name_format' => 'Last Name (doe)',
'filastname_format' => 'First Initial Last Name (jsmith)',
'lastnamefirstinitial_format' => 'Last Name First Initial (smithj)',
'firstname_lastname_underscore_format' => 'First Name Last Name (jane_smith)',
@ -407,6 +411,23 @@ return [
'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',
'eol' => 'EOL',
'email_domain' => 'Email Domain',
'email_format' => 'Email Format',
'employee_number' => 'Employee Number',
'email_domain_help' => 'This is used to generate email addresses when importing',
'error' => 'Error',
'exclude_archived' => 'Exclude Archived Assets',
'exclude_deleted' => 'Exclude Deleted Assets',
'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',
'file_name' => 'File',
'file_type' => 'File Type',
@ -186,6 +169,11 @@ return [
'last' => 'Last',
'last_login' => 'Last Login',
'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_report' => 'License Report',
'licenses_available' => 'Licenses available',
@ -314,7 +302,6 @@ return [
'type' => 'Type',
'undeployable' => 'Un-deployable',
'unknown_admin' => 'Unknown Admin',
'username_format' => 'Username Format',
'username' => 'Username',
'update' => 'Update',
'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) {
$formats = [
'firstname.lastname' => trans('general.firstname_lastname_format'),
'firstname' => trans('general.first_name_format'),
'filastname' => trans('general.filastname_format'),
'lastnamefirstinitial' => trans('general.lastnamefirstinitial_format'),
'firstname_lastname' => trans('general.firstname_lastname_underscore_format'),
'firstinitial.lastname' => trans('general.firstinitial.lastname'),
'lastname_firstinitial' => trans('general.lastname_firstinitial'),
'lastname.firstinitial' => trans('general.lastname_dot_firstinitial_format'),
'firstnamelastname' => trans('general.firstnamelastname'),
'firstnamelastinitial' => trans('general.firstnamelastinitial'),
'lastname.firstname' => trans('general.lastnamefirstname'),
'firstname.lastname' => trans('admin/settings/general.email_formats.firstname_lastname_format'),
'firstname' => trans('admin/settings/general.email_formats.first_name_format'),
'lastname' => trans('admin/settings/general.email_formats.last_name_format'),
'filastname' => trans('admin/settings/general.email_formats.filastname_format'),
'lastnamefirstinitial' => trans('admin/settings/general.email_formats.lastnamefirstinitial_format'),
'firstname_lastname' => trans('admin/settings/general.email_formats.firstname_lastname_underscore_format'),
'firstinitial.lastname' => trans('admin/settings/general.email_formats.firstinitial.lastname'),
'lastname_firstinitial' => trans('admin/settings/general.email_formats.lastname_firstinitial'),
'lastname.firstinitial' => trans('admin/settings/general.email_formats.lastname_dot_firstinitial_format'),
'firstnamelastname' => trans('admin/settings/general.email_formats.firstnamelastname'),
'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.'">';
@ -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) {
$formats = [
'firstname.lastname' => trans('admin/settings/general.firstname_lastname_format'),
'firstname' => trans('admin/settings/general.first_name_format'),
'filastname' => trans('admin/settings/general.filastname_format'),
'lastnamefirstinitial' => trans('admin/settings/general.lastnamefirstinitial_format'),
'firstname_lastname' => trans('admin/settings/general.firstname_lastname_underscore_format'),
'firstinitial.lastname' => trans('admin/settings/general.firstinitial.lastname'),
'lastname_firstinitial' => trans('admin/settings/general.lastname_firstinitial'),
'lastname.firstinitial' => trans('admin/settings/general.lastname_dot_firstinitial_format'),
'firstnamelastname' => trans('admin/settings/general.firstnamelastname'),
'firstnamelastinitial' => trans('admin/settings/general.firstnamelastinitial'),
'lastname.firstname' => trans('admin/settings/general.lastnamefirstname'),
'firstname.lastname' => trans('admin/settings/general.username_formats.firstname_lastname_format'),
'firstname' => trans('admin/settings/general.username_formats.first_name_format'),
'lastname' => trans('admin/settings/general.username_formats.last_name_format'),
'filastname' => trans('admin/settings/general.username_formats.filastname_format'),
'lastnamefirstinitial' => trans('admin/settings/general.username_formats.lastnamefirstinitial_format'),
'firstname_lastname' => trans('admin/settings/general.username_formats.firstname_lastname_underscore_format'),
'firstinitial.lastname' => trans('admin/settings/general.username_formats.firstinitial.lastname'),
'lastname_firstinitial' => trans('admin/settings/general.username_formats.lastname_firstinitial'),
'lastname.firstinitial' => trans('admin/settings/general.username_formats.lastname_dot_firstinitial_format'),
'firstnamelastname' => trans('admin/settings/general.username_formats.firstnamelastname'),
'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.'">';

View file

@ -107,7 +107,7 @@
<!-- Email format -->
<div class="form-group {{ $errors->has('email_format') ? 'error' : '' }}">
<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 class="col-md-9">
{!! Form::email_format('email_format', old('email_format', $setting->email_format), 'select2') !!}
@ -118,7 +118,7 @@
<!-- Username format -->
<div class="form-group {{ $errors->has('username_format') ? 'error' : '' }}">
<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 class="col-md-9">
{!! 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');
}
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()
{
$fullname = "Natalia Allanovna Romanova-O'Shostakova";