diff --git a/app/Console/Commands/LdapSync.php b/app/Console/Commands/LdapSync.php
index 88015b14a1..7ad4648702 100644
--- a/app/Console/Commands/LdapSync.php
+++ b/app/Console/Commands/LdapSync.php
@@ -55,6 +55,8 @@ class LdapSync extends Command
ini_set('max_execution_time', env('LDAP_TIME_LIM', 600)); //600 seconds = 10 minutes
ini_set('memory_limit', env('LDAP_MEM_LIM', '500M'));
+
+ // Map the LDAP attributes to the Snipe-IT user fields.
$ldap_map = [
"username" => Setting::getSettings()->ldap_username_field,
"last_name" => Setting::getSettings()->ldap_lname_field,
@@ -63,11 +65,17 @@ class LdapSync extends Command
"emp_num" => Setting::getSettings()->ldap_emp_num,
"email" => Setting::getSettings()->ldap_email,
"phone" => Setting::getSettings()->ldap_phone_field,
+ "mobile" => Setting::getSettings()->ldap_mobile,
"jobtitle" => Setting::getSettings()->ldap_jobtitle,
+ "address" => Setting::getSettings()->ldap_address,
+ "city" => Setting::getSettings()->ldap_city,
+ "state" => Setting::getSettings()->ldap_state,
+ "zip" => Setting::getSettings()->ldap_zip,
"country" => Setting::getSettings()->ldap_country,
"location" => Setting::getSettings()->ldap_location,
"dept" => Setting::getSettings()->ldap_dept,
"manager" => Setting::getSettings()->ldap_manager,
+ "display_name" => Setting::getSettings()->ldap_display_name,
];
$ldap_default_group = Setting::getSettings()->ldap_default_group;
@@ -234,9 +242,11 @@ class LdapSync extends Command
}
+ // Assign the mapped LDAP attributes for each user to the Snipe-IT user fields
for ($i = 0; $i < $results['count']; $i++) {
$item = [];
$item['username'] = $results[$i][$ldap_map["username"]][0] ?? '';
+ $item['display_name'] = $results[$i][$ldap_map["display_name"]][0] ?? '';
$item['employee_number'] = $results[$i][$ldap_map["emp_num"]][0] ?? '';
$item['lastname'] = $results[$i][$ldap_map["last_name"]][0] ?? '';
$item['firstname'] = $results[$i][$ldap_map["first_name"]][0] ?? '';
@@ -244,8 +254,13 @@ class LdapSync extends Command
$item['ldap_location_override'] = $results[$i]['ldap_location_override'] ?? '';
$item['location_id'] = $results[$i]['location_id'] ?? '';
$item['telephone'] = $results[$i][$ldap_map["phone"]][0] ?? '';
+ $item['mobile'] = $results[$i][$ldap_map["mobile"]][0] ?? '';
$item['jobtitle'] = $results[$i][$ldap_map["jobtitle"]][0] ?? '';
+ $item['address'] = $results[$i][$ldap_map["ldap_address"]][0] ?? '';
+ $item['city'] = $results[$i][$ldap_map["city"]][0] ?? '';
+ $item['state'] = $results[$i][$ldap_map["state"]][0] ?? '';
$item['country'] = $results[$i][$ldap_map["country"]][0] ?? '';
+ $item['zip'] = $results[$i][$ldap_map["zip"]][0] ?? '';
$item['department'] = $results[$i][$ldap_map["dept"]][0] ?? '';
$item['manager'] = $results[$i][$ldap_map["manager"]][0] ?? '';
$item['location'] = $results[$i][$ldap_map["location"]][0] ?? '';
@@ -278,6 +293,9 @@ class LdapSync extends Command
if($ldap_map["username"] != null){
$user->username = $item['username'];
}
+ if($ldap_map["display_name"] != null){
+ $user->display_name = $item['display_name'];
+ }
if($ldap_map["last_name"] != null){
$user->last_name = $item['lastname'];
}
@@ -293,6 +311,9 @@ class LdapSync extends Command
if($ldap_map["phone"] != null){
$user->phone = $item['telephone'];
}
+ if($ldap_map["mobile"] != null){
+ $user->mobile = $item['mobile'];
+ }
if($ldap_map["jobtitle"] != null){
$user->jobtitle = $item['jobtitle'];
}
diff --git a/app/Console/Commands/SendAcceptanceReminder.php b/app/Console/Commands/SendAcceptanceReminder.php
index c1cf4ffda2..67efecbb34 100644
--- a/app/Console/Commands/SendAcceptanceReminder.php
+++ b/app/Console/Commands/SendAcceptanceReminder.php
@@ -77,7 +77,7 @@ class SendAcceptanceReminder extends Command
if(!$email){
$no_email_list[] = [
'id' => $acceptance->assignedTo?->id,
- 'name' => $acceptance->assignedTo?->present()->fullName(),
+ 'name' => $acceptance->assignedTo?->display_name,
];
} else {
$count++;
diff --git a/app/Http/Controllers/Api/AssetsController.php b/app/Http/Controllers/Api/AssetsController.php
index cb8c9bdcc6..bfe071a6b5 100644
--- a/app/Http/Controllers/Api/AssetsController.php
+++ b/app/Http/Controllers/Api/AssetsController.php
@@ -610,7 +610,7 @@ class AssetsController extends Controller
$asset->use_text = $asset->present()->fullName;
if (($asset->checkedOutToUser()) && ($asset->assigned)) {
- $asset->use_text .= ' → ' . $asset->assigned->getFullNameAttribute();
+ $asset->use_text .= ' → ' . $asset->assigned->display_name;
}
diff --git a/app/Http/Controllers/Api/ConsumablesController.php b/app/Http/Controllers/Api/ConsumablesController.php
index 35fb08470a..e163f080aa 100644
--- a/app/Http/Controllers/Api/ConsumablesController.php
+++ b/app/Http/Controllers/Api/ConsumablesController.php
@@ -230,13 +230,13 @@ class ConsumablesController extends Controller
'avatar' => ($consumable_assignment->user) ? e($consumable_assignment->user->present()->gravatar) : '',
'user' => ($consumable_assignment->user) ? [
'id' => (int) $consumable_assignment->user->id,
- 'name'=> e($consumable_assignment->user->present()->fullName()),
+ 'name'=> e($consumable_assignment->user->display_name),
] : null,
'created_at' => Helper::getFormattedDateObject($consumable_assignment->created_at, 'datetime'),
'note' => ($consumable_assignment->note) ? e($consumable_assignment->note) : null,
'created_by' => ($consumable_assignment->adminuser) ? [
'id' => (int) $consumable_assignment->adminuser->id,
- 'name'=> e($consumable_assignment->adminuser->present()->fullName()),
+ 'name'=> e($consumable_assignment->adminuser->display_name),
] : null,
];
}
diff --git a/app/Http/Controllers/Api/SettingsController.php b/app/Http/Controllers/Api/SettingsController.php
index 134d24ef2a..3e48eb23f1 100644
--- a/app/Http/Controllers/Api/SettingsController.php
+++ b/app/Http/Controllers/Api/SettingsController.php
@@ -51,6 +51,7 @@ class SettingsController extends Controller
})->slice(0, 10)->map(function ($item) use ($settings) {
return (object) [
'username' => $item[$settings['ldap_username_field']][0] ?? null,
+ 'display_name' => $item[$settings['ldap_display_name']][0] ?? null,
'employee_number' => $item[$settings['ldap_emp_num']][0] ?? null,
'lastname' => $item[$settings['ldap_lname_field']][0] ?? null,
'firstname' => $item[$settings['ldap_fname_field']][0] ?? null,
diff --git a/app/Http/Controllers/Api/UsersController.php b/app/Http/Controllers/Api/UsersController.php
index a0d9aeaa30..ac9c6add7b 100644
--- a/app/Http/Controllers/Api/UsersController.php
+++ b/app/Http/Controllers/Api/UsersController.php
@@ -64,6 +64,7 @@ class UsersController extends Controller
'users.jobtitle',
'users.last_login',
'users.last_name',
+ 'users.display_name',
'users.locale',
'users.location_id',
'users.manager_id',
@@ -154,6 +155,10 @@ class UsersController extends Controller
$users = $users->where('users.last_name', '=', $request->input('last_name'));
}
+ if ($request->filled('display_name')) {
+ $users = $users->where('users.display_name', '=', $request->input('display_name'));
+ }
+
if ($request->filled('employee_num')) {
$users = $users->where('users.employee_num', '=', $request->input('employee_num'));
}
@@ -284,6 +289,7 @@ class UsersController extends Controller
[
'last_name',
'first_name',
+ 'display_name',
'email',
'jobtitle',
'username',
@@ -355,6 +361,7 @@ class UsersController extends Controller
'users.employee_num',
'users.first_name',
'users.last_name',
+ 'users.display_name',
'users.gravatar',
'users.avatar',
'users.email',
@@ -365,20 +372,17 @@ class UsersController extends Controller
$users = $users->where(function ($query) use ($request) {
$query->SimpleNameSearch($request->get('search'))
->orWhere('username', 'LIKE', '%'.$request->get('search').'%')
+ ->orWhere('display_name', 'LIKE', '%'.$request->get('search').'%')
->orWhere('email', 'LIKE', '%'.$request->get('search').'%')
->orWhere('employee_num', 'LIKE', '%'.$request->get('search').'%');
});
}
- $users = $users->orderBy('last_name', 'asc')->orderBy('first_name', 'asc');
+ $users = $users->orderBy('display_name', 'asc')->orderBy('last_name', 'asc')->orderBy('first_name', 'asc');
$users = $users->paginate(50);
foreach ($users as $user) {
- $name_str = '';
- if ($user->last_name != '') {
- $name_str .= $user->last_name.', ';
- }
- $name_str .= $user->first_name;
+ $name_str = $user->display_name;
if ($user->username != '') {
$name_str .= ' ('.$user->username.')';
@@ -511,6 +515,10 @@ class UsersController extends Controller
$user->username = $request->input('username');
}
+ if ($request->filled('display_name')) {
+ $user->display_name = $request->input('display_name');
+ }
+
if ($request->filled('email')) {
$user->email = $request->input('email');
}
diff --git a/app/Http/Controllers/Assets/AssetsController.php b/app/Http/Controllers/Assets/AssetsController.php
index 67b6bfb4e0..afc16a73ca 100755
--- a/app/Http/Controllers/Assets/AssetsController.php
+++ b/app/Http/Controllers/Assets/AssetsController.php
@@ -797,7 +797,7 @@ class AssetsController extends Controller
'item_id' => $asset->id,
'item_type' => Asset::class,
'created_by' => auth()->id(),
- 'note' => 'Checkout imported by '.auth()->user()->present()->fullName().' from history importer',
+ 'note' => 'Checkout imported by '.auth()->user()->display_name.' from history importer',
'target_id' => $item[$asset_tag][$batch_counter]['user_id'],
'target_type' => User::class,
'created_at' => $item[$asset_tag][$batch_counter]['checkout_date'],
@@ -825,7 +825,7 @@ class AssetsController extends Controller
'item_id' => $item[$asset_tag][$batch_counter]['asset_id'],
'item_type' => Asset::class,
'created_by' => auth()->id(),
- 'note' => 'Checkin imported by '.auth()->user()->present()->fullName().' from history importer',
+ 'note' => 'Checkin imported by '.auth()->user()->display_name.' from history importer',
'target_id' => null,
'created_at' => $checkin_date,
'action_type' => 'checkin',
diff --git a/app/Http/Controllers/Licenses/LicensesController.php b/app/Http/Controllers/Licenses/LicensesController.php
index d67f2a0be1..98a65f5ad4 100755
--- a/app/Http/Controllers/Licenses/LicensesController.php
+++ b/app/Http/Controllers/Licenses/LicensesController.php
@@ -364,7 +364,7 @@ class LicensesController extends Controller
$license->order_number,
$license->free_seat_count,
$license->seats,
- ($license->adminuser ? $license->adminuser->present()->fullName() : trans('admin/reports/general.deleted_user')),
+ ($license->adminuser ? $license->adminuser->display_name : trans('admin/reports/general.deleted_user')),
$license->depreciation ? $license->depreciation->name: '',
$license->updated_at,
$license->deleted_at,
diff --git a/app/Http/Controllers/ReportsController.php b/app/Http/Controllers/ReportsController.php
index 954b7cb64c..6883e8cea3 100644
--- a/app/Http/Controllers/ReportsController.php
+++ b/app/Http/Controllers/ReportsController.php
@@ -275,7 +275,7 @@ class ReportsController extends Controller
if ($actionlog->target) {
if ($actionlog->targetType() == 'user') {
- $target_name = $actionlog->target->getFullNameAttribute();
+ $target_name = $actionlog->target->display_name;
} else {
$target_name = $actionlog->target->getDisplayNameAttribute();
}
@@ -289,7 +289,7 @@ class ReportsController extends Controller
$row = [
$actionlog->created_at,
- ($actionlog->adminuser) ? e($actionlog->adminuser->getFullNameAttribute()) : '',
+ ($actionlog->adminuser) ? e($actionlog->adminuser->display_name) : '',
$actionlog->present()->actionType(),
e($actionlog->itemType()),
($actionlog->itemType() == 'user') ? $actionlog->filename : $item_name,
@@ -856,7 +856,7 @@ class ReportsController extends Controller
}
if ($request->filled('assigned_to')) {
- $row[] = ($asset->checkedOutToUser() && $asset->assigned) ? $asset->assigned->getFullNameAttribute() : ($asset->assigned ? $asset->assigned->display_name : '');
+ $row[] = ($asset->checkedOutToUser() && $asset->assigned) ?? $asset->assigned->display_name;
$row[] = ($asset->checkedOutToUser() && $asset->assigned) ? 'user' : $asset->assignedType();
}
diff --git a/app/Http/Controllers/SettingsController.php b/app/Http/Controllers/SettingsController.php
index 56b36470d4..8c57efa5eb 100644
--- a/app/Http/Controllers/SettingsController.php
+++ b/app/Http/Controllers/SettingsController.php
@@ -873,6 +873,7 @@ class SettingsController extends Controller
$setting->ldap_default_group = $request->input('ldap_default_group');
$setting->ldap_filter = $request->input('ldap_filter');
$setting->ldap_username_field = $request->input('ldap_username_field');
+ $setting->ldap_display_name = $request->input('ldap_display_name');
$setting->ldap_lname_field = $request->input('ldap_lname_field');
$setting->ldap_fname_field = $request->input('ldap_fname_field');
$setting->ldap_auth_filter_query = $request->input('ldap_auth_filter_query');
@@ -889,7 +890,12 @@ class SettingsController extends Controller
$setting->ldap_pw_sync = $request->input('ldap_pw_sync', '0');
$setting->custom_forgot_pass_url = $request->input('custom_forgot_pass_url');
$setting->ldap_phone_field = $request->input('ldap_phone');
+ $setting->ldap_mobile = $request->input('ldap_mobile');
$setting->ldap_jobtitle = $request->input('ldap_jobtitle');
+ $setting->ldap_address = $request->input('ldap_address');
+ $setting->ldap_city = $request->input('ldap_city');
+ $setting->ldap_state = $request->input('ldap_state');
+ $setting->ldap_zip = $request->input('ldap_zip');
$setting->ldap_country = $request->input('ldap_country');
$setting->ldap_location = $request->input('ldap_location');
$setting->ldap_dept = $request->input('ldap_dept');
diff --git a/app/Http/Controllers/Users/UsersController.php b/app/Http/Controllers/Users/UsersController.php
index 2275e565cb..ec87d3ec99 100755
--- a/app/Http/Controllers/Users/UsersController.php
+++ b/app/Http/Controllers/Users/UsersController.php
@@ -88,6 +88,7 @@ class UsersController extends Controller
//Username, email, and password need to be handled specially because the need to respect config values on an edit.
$user->email = trim($request->input('email'));
$user->username = trim($request->input('username'));
+ $user->display_name = $request->input('display_name');
if ($request->filled('password')) {
$user->password = bcrypt($request->input('password'));
}
@@ -240,6 +241,7 @@ class UsersController extends Controller
$user->first_name = $request->input('first_name');
$user->last_name = $request->input('last_name');
+ $user->display_name = $request->input('display_name');
$user->two_factor_optin = $request->input('two_factor_optin') ?: 0;
$user->locale = $request->input('locale');
$user->employee_num = $request->input('employee_num');
@@ -562,10 +564,10 @@ class UsersController extends Controller
$user->employee_num,
$user->first_name,
$user->last_name,
- $user->present()->fullName(),
+ $user->display_name,
$user->username,
$user->email,
- ($user->manager) ? $user->manager->present()->fullName() : '',
+ ($user->manager) ? $user->manager->display_name : '',
($user->userloc) ? $user->userloc->name : '',
($user->department) ? $user->department->name : '',
$user->assets->count(),
diff --git a/app/Http/Controllers/ViewAssetsController.php b/app/Http/Controllers/ViewAssetsController.php
index c4e72971b4..2b767650ad 100755
--- a/app/Http/Controllers/ViewAssetsController.php
+++ b/app/Http/Controllers/ViewAssetsController.php
@@ -185,7 +185,7 @@ class ViewAssetsController extends Controller
$logaction->target_type = User::class;
$data['item_quantity'] = $request->has('request-quantity') ? e($request->input('request-quantity')) : 1;
- $data['requested_by'] = $user->present()->fullName();
+ $data['requested_by'] = $user->display_name;
$data['item'] = $item;
$data['item_type'] = $itemType;
$data['target'] = auth()->user();
diff --git a/app/Http/Transformers/AccessoriesTransformer.php b/app/Http/Transformers/AccessoriesTransformer.php
index b502490884..491871e122 100644
--- a/app/Http/Transformers/AccessoriesTransformer.php
+++ b/app/Http/Transformers/AccessoriesTransformer.php
@@ -44,7 +44,7 @@ class AccessoriesTransformer
'checkouts_count' => $accessory->checkouts_count,
'created_by' => ($accessory->adminuser) ? [
'id' => (int) $accessory->adminuser->id,
- 'name'=> e($accessory->adminuser->present()->fullName()),
+ 'name'=> e($accessory->adminuser->display_name),
] : null,
'created_at' => Helper::getFormattedDateObject($accessory->created_at, 'datetime'),
'updated_at' => Helper::getFormattedDateObject($accessory->updated_at, 'datetime'),
diff --git a/app/Http/Transformers/ActionlogsTransformer.php b/app/Http/Transformers/ActionlogsTransformer.php
index 64086ca46e..5f0007310c 100644
--- a/app/Http/Transformers/ActionlogsTransformer.php
+++ b/app/Http/Transformers/ActionlogsTransformer.php
@@ -150,7 +150,7 @@ class ActionlogsTransformer
'item' => ($actionlog->item) ? [
'id' => (int) $actionlog->item->id,
- 'name' => ($actionlog->itemType()=='user') ? e($actionlog->item->getFullNameAttribute()) : e($actionlog->item->getDisplayNameAttribute()),
+ 'name' => e($actionlog->item->display_name) ?? null,
'type' => e($actionlog->itemType()),
'serial' =>e($actionlog->item->serial) ? e($actionlog->item->serial) : null
] : null,
@@ -165,19 +165,19 @@ class ActionlogsTransformer
'action_type' => $actionlog->present()->actionType(),
'admin' => ($actionlog->adminuser) ? [
'id' => (int) $actionlog->adminuser->id,
- 'name' => e($actionlog->adminuser->getFullNameAttribute()),
+ 'name' => e($actionlog->adminuser->display_name),
'first_name'=> e($actionlog->adminuser->first_name),
'last_name'=> e($actionlog->adminuser->last_name)
] : null,
'created_by' => ($actionlog->adminuser) ? [
'id' => (int) $actionlog->adminuser->id,
- 'name' => e($actionlog->adminuser->getFullNameAttribute()),
+ 'name' => e($actionlog->adminuser->display_name),
'first_name'=> e($actionlog->adminuser->first_name),
'last_name'=> e($actionlog->adminuser->last_name)
] : null,
'target' => ($actionlog->target) ? [
'id' => (int) $actionlog->target->id,
- 'name' => ($actionlog->targetType()=='user') ? e($actionlog->target->getFullNameAttribute()) : e($actionlog->target->getDisplayNameAttribute()),
+ 'name' => ($actionlog->target->display_name) ?? null,
'type' => e($actionlog->targetType()),
] : null,
diff --git a/app/Http/Transformers/AssetModelsTransformer.php b/app/Http/Transformers/AssetModelsTransformer.php
index 2d47ca47db..81814c5ee1 100644
--- a/app/Http/Transformers/AssetModelsTransformer.php
+++ b/app/Http/Transformers/AssetModelsTransformer.php
@@ -68,7 +68,7 @@ class AssetModelsTransformer
'notes' => Helper::parseEscapedMarkedownInline($assetmodel->notes),
'created_by' => ($assetmodel->adminuser) ? [
'id' => (int) $assetmodel->adminuser->id,
- 'name'=> e($assetmodel->adminuser->present()->fullName()),
+ 'name'=> e($assetmodel->adminuser->display_name),
] : null,
'created_at' => Helper::getFormattedDateObject($assetmodel->created_at, 'datetime'),
'updated_at' => Helper::getFormattedDateObject($assetmodel->updated_at, 'datetime'),
diff --git a/app/Http/Transformers/AssetsTransformer.php b/app/Http/Transformers/AssetsTransformer.php
index eb2f6b26a1..e971f1e7ae 100644
--- a/app/Http/Transformers/AssetsTransformer.php
+++ b/app/Http/Transformers/AssetsTransformer.php
@@ -91,7 +91,7 @@ class AssetsTransformer
'warranty_expires' => ($asset->warranty_months > 0) ? Helper::getFormattedDateObject($asset->warranty_expires, 'date') : null,
'created_by' => ($asset->adminuser) ? [
'id' => (int) $asset->adminuser->id,
- 'name'=> e($asset->adminuser->present()->fullName()),
+ 'name'=> e($asset->adminuser->display_name),
] : null,
'created_at' => Helper::getFormattedDateObject($asset->created_at, 'datetime'),
'updated_at' => Helper::getFormattedDateObject($asset->updated_at, 'datetime'),
@@ -287,7 +287,7 @@ class AssetsTransformer
'id' => (int) $asset->id,
'image' => ($asset->getImageUrl()) ? $asset->getImageUrl() : null,
'type' => 'asset',
- 'name' => e($asset->present()->fullName()),
+ 'name' => e($asset->display_name),
'model' => ($asset->model) ? e($asset->model->name) : null,
'model_number' => (($asset->model) && ($asset->model->model_number)) ? e($asset->model->model_number) : null,
'asset_tag' => e($asset->asset_tag),
diff --git a/app/Http/Transformers/CategoriesTransformer.php b/app/Http/Transformers/CategoriesTransformer.php
index 0d1834649d..348c5d4552 100644
--- a/app/Http/Transformers/CategoriesTransformer.php
+++ b/app/Http/Transformers/CategoriesTransformer.php
@@ -64,7 +64,7 @@ class CategoriesTransformer
'licenses_count' => (int) $category->licenses_count,
'created_by' => ($category->adminuser) ? [
'id' => (int) $category->adminuser->id,
- 'name'=> e($category->adminuser->present()->fullName()),
+ 'name'=> e($category->adminuser->display_name),
] : null,
'notes' => Helper::parseEscapedMarkedownInline($category->notes),
'created_at' => Helper::getFormattedDateObject($category->created_at, 'datetime'),
diff --git a/app/Http/Transformers/CompaniesTransformer.php b/app/Http/Transformers/CompaniesTransformer.php
index 8ca5344de6..13f9a05e27 100644
--- a/app/Http/Transformers/CompaniesTransformer.php
+++ b/app/Http/Transformers/CompaniesTransformer.php
@@ -38,7 +38,7 @@ class CompaniesTransformer
'users_count' => (int) $company->users_count,
'created_by' => ($company->adminuser) ? [
'id' => (int) $company->adminuser->id,
- 'name'=> e($company->adminuser->present()->fullName()),
+ 'name'=> e($company->adminuser->display_name),
] : null,
'notes' => Helper::parseEscapedMarkedownInline($company->notes),
'created_at' => Helper::getFormattedDateObject($company->created_at, 'datetime'),
diff --git a/app/Http/Transformers/ComponentsTransformer.php b/app/Http/Transformers/ComponentsTransformer.php
index 90d10ba9a5..969a137f5c 100644
--- a/app/Http/Transformers/ComponentsTransformer.php
+++ b/app/Http/Transformers/ComponentsTransformer.php
@@ -51,7 +51,7 @@ class ComponentsTransformer
'notes' => ($component->notes) ? Helper::parseEscapedMarkedownInline($component->notes) : null,
'created_by' => ($component->adminuser) ? [
'id' => (int) $component->adminuser->id,
- 'name'=> e($component->adminuser->present()->fullName()),
+ 'name'=> e($component->adminuser->display_name),
] : null,
'created_at' => Helper::getFormattedDateObject($component->created_at, 'datetime'),
'updated_at' => Helper::getFormattedDateObject($component->updated_at, 'datetime'),
diff --git a/app/Http/Transformers/ConsumablesTransformer.php b/app/Http/Transformers/ConsumablesTransformer.php
index 8a40606c87..4c7dbf9cc5 100644
--- a/app/Http/Transformers/ConsumablesTransformer.php
+++ b/app/Http/Transformers/ConsumablesTransformer.php
@@ -42,7 +42,7 @@ class ConsumablesTransformer
'notes' => ($consumable->notes) ? Helper::parseEscapedMarkedownInline($consumable->notes) : null,
'created_by' => ($consumable->adminuser) ? [
'id' => (int) $consumable->adminuser->id,
- 'name'=> e($consumable->adminuser->present()->fullName()),
+ 'name'=> e($consumable->adminuser->display_name),
] : null,
'created_at' => Helper::getFormattedDateObject($consumable->created_at, 'datetime'),
'updated_at' => Helper::getFormattedDateObject($consumable->updated_at, 'datetime'),
diff --git a/app/Http/Transformers/DepartmentsTransformer.php b/app/Http/Transformers/DepartmentsTransformer.php
index 3d1e4c6f90..e072585a12 100644
--- a/app/Http/Transformers/DepartmentsTransformer.php
+++ b/app/Http/Transformers/DepartmentsTransformer.php
@@ -35,7 +35,7 @@ class DepartmentsTransformer
] : null,
'manager' => ($department->manager) ? [
'id' => (int) $department->manager->id,
- 'name' => e($department->manager->getFullNameAttribute()),
+ 'name' => e($department->manager->display_name),
'first_name'=> e($department->manager->first_name),
'last_name'=> e($department->manager->last_name),
] : null,
diff --git a/app/Http/Transformers/DepreciationsTransformer.php b/app/Http/Transformers/DepreciationsTransformer.php
index af153539e2..3b0d68392c 100644
--- a/app/Http/Transformers/DepreciationsTransformer.php
+++ b/app/Http/Transformers/DepreciationsTransformer.php
@@ -33,7 +33,7 @@ class DepreciationsTransformer
'licenses_count' => ($depreciation->licenses_count > 0) ? (int) $depreciation->licenses_count : 0,
'created_by' => ($depreciation->adminuser) ? [
'id' => (int) $depreciation->adminuser->id,
- 'name'=> e($depreciation->adminuser->present()->fullName()),
+ 'name'=> e($depreciation->adminuser->display_name),
] : null,
'created_at' => Helper::getFormattedDateObject($depreciation->created_at, 'datetime'),
'updated_at' => Helper::getFormattedDateObject($depreciation->updated_at, 'datetime')
diff --git a/app/Http/Transformers/GroupsTransformer.php b/app/Http/Transformers/GroupsTransformer.php
index 9495aeeecc..7593926155 100644
--- a/app/Http/Transformers/GroupsTransformer.php
+++ b/app/Http/Transformers/GroupsTransformer.php
@@ -29,7 +29,7 @@ class GroupsTransformer
'notes' => Helper::parseEscapedMarkedownInline($group->notes),
'created_by' => ($group->adminuser) ? [
'id' => (int) $group->adminuser->id,
- 'name'=> e($group->adminuser->present()->fullName()),
+ 'name'=> e($group->adminuser->display_name),
] : null,
'created_at' => Helper::getFormattedDateObject($group->created_at, 'datetime'),
'updated_at' => Helper::getFormattedDateObject($group->updated_at, 'datetime'),
diff --git a/app/Http/Transformers/LicensesTransformer.php b/app/Http/Transformers/LicensesTransformer.php
index af2e902087..678c491257 100644
--- a/app/Http/Transformers/LicensesTransformer.php
+++ b/app/Http/Transformers/LicensesTransformer.php
@@ -48,7 +48,7 @@ class LicensesTransformer
'category' => ($license->category) ? ['id' => (int) $license->category->id, 'name'=> e($license->category->name)] : null,
'created_by' => ($license->adminuser) ? [
'id' => (int) $license->adminuser->id,
- 'name'=> e($license->adminuser->present()->fullName()),
+ 'name'=> e($license->adminuser->display_name),
] : null,
'created_at' => Helper::getFormattedDateObject($license->created_at, 'datetime'),
'updated_at' => Helper::getFormattedDateObject($license->updated_at, 'datetime'),
diff --git a/app/Http/Transformers/MaintenancesTransformer.php b/app/Http/Transformers/MaintenancesTransformer.php
index c2fc8a0e14..c20c254869 100644
--- a/app/Http/Transformers/MaintenancesTransformer.php
+++ b/app/Http/Transformers/MaintenancesTransformer.php
@@ -73,11 +73,11 @@ class MaintenancesTransformer
'completion_date' => Helper::getFormattedDateObject($assetmaintenance->completion_date, 'date'),
'user_id' => ($assetmaintenance->adminuser) ? [
'id' => $assetmaintenance->adminuser->id,
- 'name'=> e($assetmaintenance->adminuser->present()->fullName())
+ 'name'=> e($assetmaintenance->adminuser->display_name)
] : null, // legacy to not change the shape of the API
'created_by' => ($assetmaintenance->adminuser) ? [
'id' => (int) $assetmaintenance->adminuser->id,
- 'name'=> e($assetmaintenance->adminuser->present()->fullName()),
+ 'name'=> e($assetmaintenance->adminuser->display_name),
] : null,
'created_at' => Helper::getFormattedDateObject($assetmaintenance->created_at, 'datetime'),
'updated_at' => Helper::getFormattedDateObject($assetmaintenance->updated_at, 'datetime'),
diff --git a/app/Http/Transformers/ManufacturersTransformer.php b/app/Http/Transformers/ManufacturersTransformer.php
index cf17eb7764..0d1373414c 100644
--- a/app/Http/Transformers/ManufacturersTransformer.php
+++ b/app/Http/Transformers/ManufacturersTransformer.php
@@ -40,7 +40,7 @@ class ManufacturersTransformer
'notes' => Helper::parseEscapedMarkedownInline($manufacturer->notes),
'created_by' => ($manufacturer->adminuser) ? [
'id' => (int) $manufacturer->adminuser->id,
- 'name'=> e($manufacturer->adminuser->present()->fullName()),
+ 'name'=> e($manufacturer->adminuser->display_name),
] : null,
'created_at' => Helper::getFormattedDateObject($manufacturer->created_at, 'datetime'),
'updated_at' => Helper::getFormattedDateObject($manufacturer->updated_at, 'datetime'),
diff --git a/app/Http/Transformers/PredefinedKitsTransformer.php b/app/Http/Transformers/PredefinedKitsTransformer.php
index 61c9e476a9..3660ff269e 100644
--- a/app/Http/Transformers/PredefinedKitsTransformer.php
+++ b/app/Http/Transformers/PredefinedKitsTransformer.php
@@ -34,7 +34,7 @@ class PredefinedKitsTransformer
'name' => e($kit->name),
'created_by' => ($kit->adminuser) ? [
'id' => (int) $kit->adminuser->id,
- 'name'=> e($kit->adminuser->present()->fullName()),
+ 'name'=> e($kit->adminuser->display_name),
] : null,
'created_at' => Helper::getFormattedDateObject($kit->created_at, 'datetime'),
'updated_at' => Helper::getFormattedDateObject($kit->updated_at, 'datetime'),
diff --git a/app/Http/Transformers/ProfileTransformer.php b/app/Http/Transformers/ProfileTransformer.php
index 9b1104515c..a0c07e699f 100644
--- a/app/Http/Transformers/ProfileTransformer.php
+++ b/app/Http/Transformers/ProfileTransformer.php
@@ -26,7 +26,7 @@ class ProfileTransformer
'id' => (int) $file->id,
'icon' => Helper::filetype_icon($file->filename),
'item' => ($file->item) ? [
- 'name' => ($file->itemType()=='user') ? e($file->item->getFullNameAttribute()) : e($file->item->getDisplayNameAttribute()),
+ 'name' => ($file->itemType()=='user') ? e($file->item->display_name) : e($file->item->getDisplayNameAttribute()),
'type' => e($file->itemType()),
] : null,
'filename' => e($file->filename),
diff --git a/app/Http/Transformers/StatuslabelsTransformer.php b/app/Http/Transformers/StatuslabelsTransformer.php
index 751edb7016..6409795994 100644
--- a/app/Http/Transformers/StatuslabelsTransformer.php
+++ b/app/Http/Transformers/StatuslabelsTransformer.php
@@ -32,7 +32,7 @@ class StatuslabelsTransformer
'notes' => e($statuslabel->notes),
'created_by' => ($statuslabel->adminuser) ? [
'id' => (int) $statuslabel->adminuser->id,
- 'name'=> e($statuslabel->adminuser->present()->fullName()),
+ 'name'=> e($statuslabel->adminuser->display_name),
] : null,
'created_at' => Helper::getFormattedDateObject($statuslabel->created_at, 'datetime'),
'updated_at' => Helper::getFormattedDateObject($statuslabel->updated_at, 'datetime'),
diff --git a/app/Http/Transformers/UsersTransformer.php b/app/Http/Transformers/UsersTransformer.php
index fb941007ab..85f6bdd271 100644
--- a/app/Http/Transformers/UsersTransformer.php
+++ b/app/Http/Transformers/UsersTransformer.php
@@ -31,16 +31,17 @@ class UsersTransformer
$array = [
'id' => (int) $user->id,
'avatar' => e($user->present()->gravatar) ?? null,
- 'name' => e($user->getFullNameAttribute()),
- 'first_name' => e($user->first_name),
- 'last_name' => e($user->last_name),
- 'username' => e($user->username),
+ 'name' => e($user->getFullNameAttribute()) ?? null,
+ 'first_name' => e($user->first_name) ?? null,
+ 'last_name' => e($user->last_name) ?? null,
+ 'display_name' => e($user->getRawOriginal('display_name')) ?? null,
+ 'username' => e($user->username) ?? null,
'remote' => ($user->remote == '1') ? true : false,
'locale' => ($user->locale) ? e($user->locale) : null,
'employee_num' => ($user->employee_num) ? e($user->employee_num) : null,
'manager' => ($user->manager) ? [
'id' => (int) $user->manager->id,
- 'name'=> e($user->manager->first_name).' '.e($user->manager->last_name),
+ 'name'=> e($user->manager->display_name),
] : null,
'jobtitle' => ($user->jobtitle) ? e($user->jobtitle) : null,
'vip' => ($user->vip == '1') ? true : false,
@@ -59,7 +60,7 @@ class UsersTransformer
] : null,
'department_manager' => ($user->department?->manager) ? [
'id' => (int) $user->department->manager->id,
- 'name'=> e($user->department->manager->full_name),
+ 'name'=> e($user->department->manager->display_name),
] : null,
'location' => ($user->userloc) ? [
'id' => (int) $user->userloc->id,
@@ -82,7 +83,7 @@ class UsersTransformer
'company' => ($user->company) ? ['id' => (int) $user->company->id, 'name'=> e($user->company->name)] : null,
'created_by' => ($user->createdBy) ? [
'id' => (int) $user->createdBy->id,
- 'name'=> e($user->createdBy->present()->fullName),
+ 'name'=> e($user->createdBy->display_name),
] : null,
'created_at' => Helper::getFormattedDateObject($user->created_at, 'datetime'),
'updated_at' => Helper::getFormattedDateObject($user->updated_at, 'datetime'),
@@ -138,6 +139,7 @@ class UsersTransformer
'first_name' => e($user->first_name),
'last_name' => e($user->last_name),
'username' => e($user->username),
+ 'display_name' => e($user->display_name),
'created_by' => $user->adminuser ? [
'id' => (int) $user->adminuser->id,
'name'=> e($user->adminuser->present()->fullName),
diff --git a/app/Importer/Importer.php b/app/Importer/Importer.php
index 3c0ea4e264..a5142f4380 100644
--- a/app/Importer/Importer.php
+++ b/app/Importer/Importer.php
@@ -72,6 +72,7 @@ abstract class Importer
'termination_date' => 'termination date',
'warranty_months' => 'warranty',
'full_name' => 'full name',
+ 'display_name' => 'display name',
'email' => 'email',
'username' => 'username',
'address' => 'address',
@@ -299,6 +300,7 @@ abstract class Importer
'full_name' => $this->findCsvMatch($row, 'full_name'),
'first_name' => $this->findCsvMatch($row, 'first_name'),
'last_name' => $this->findCsvMatch($row, 'last_name'),
+ 'display_name' => $this->findCsvMatch($row, 'display_name'),
'email' => $this->findCsvMatch($row, 'email'),
'manager_id'=> '',
'department_id' => '',
@@ -369,6 +371,7 @@ abstract class Importer
$user->first_name = $user_array['first_name'];
$user->last_name = $user_array['last_name'];
$user->username = $user_array['username'];
+ $user->display_name = $user_array['display_name'] ?? null;
$user->email = $user_array['email'];
$user->manager_id = $user_array['manager_id'] ?? null;
$user->department_id = $user_array['department_id'] ?? null;
diff --git a/app/Importer/UserImporter.php b/app/Importer/UserImporter.php
index 633551c24d..942f1cf4a2 100644
--- a/app/Importer/UserImporter.php
+++ b/app/Importer/UserImporter.php
@@ -47,6 +47,7 @@ class UserImporter extends ItemImporter
// Pull the records from the CSV to determine their values
$this->item['id'] = trim($this->findCsvMatch($row, 'id'));
$this->item['username'] = trim($this->findCsvMatch($row, 'username'));
+ $this->item['display_name'] = trim($this->findCsvMatch($row, 'display_name'));
$this->item['first_name'] = trim($this->findCsvMatch($row, 'first_name'));
$this->item['last_name'] = trim($this->findCsvMatch($row, 'last_name'));
$this->item['email'] = trim($this->findCsvMatch($row, 'email'));
diff --git a/app/Livewire/Importer.php b/app/Livewire/Importer.php
index 6e6a6f1847..d86b2469c1 100644
--- a/app/Livewire/Importer.php
+++ b/app/Livewire/Importer.php
@@ -339,6 +339,7 @@ class Importer extends Component
'start_date' => trans('general.start_date'),
'state' => trans('general.state'),
'username' => trans('admin/users/table.username'),
+ 'display_name' => trans('admin/users/table.display_name'),
'vip' => trans('general.importer.vip'),
'website' => trans('general.website'),
'zip' => trans('general.zip'),
@@ -485,6 +486,13 @@ class Importer extends Component
'username',
trans('general.importer.checked_out_to_username'),
],
+ 'display_name' =>
+ [
+ 'display name',
+ 'displayName',
+ 'display',
+ trans('admin/users/table.display_name'),
+ ],
'first_name' =>
[
'first name',
diff --git a/app/Mail/CheckoutAssetMail.php b/app/Mail/CheckoutAssetMail.php
index fae935ceb7..72a96ee271 100644
--- a/app/Mail/CheckoutAssetMail.php
+++ b/app/Mail/CheckoutAssetMail.php
@@ -38,10 +38,10 @@ class CheckoutAssetMail extends Mailable
// Location is a target option, but there are no emails currently associated with locations.
if($this->target instanceof User){
- $this->target = $this->target->present()?->fullName();
+ $this->target = $this->target->display_name;
}
else if($this->target instanceof Asset){
- $this->target = $this->target->assignedto?->present()?->fullName();
+ $this->target = $this->target->assignedto?->display_name;
}
$this->last_checkout = '';
diff --git a/app/Mail/CheckoutLicenseMail.php b/app/Mail/CheckoutLicenseMail.php
index e0701413e7..f3688bae5a 100644
--- a/app/Mail/CheckoutLicenseMail.php
+++ b/app/Mail/CheckoutLicenseMail.php
@@ -31,10 +31,10 @@ class CheckoutLicenseMail extends Mailable
$this->target = $checkedOutTo;
if($this->target instanceof User){
- $this->target = $this->target->present()?->fullName();
+ $this->target = $this->target->display_name;
}
elseif($this->target instanceof Asset){
- $this->target = $this->target->assignedto?->present()?->fullName();
+ $this->target = $this->target->display_name;
}
}
diff --git a/app/Models/Labels/FieldOption.php b/app/Models/Labels/FieldOption.php
index 916707b21d..cf65af57ba 100644
--- a/app/Models/Labels/FieldOption.php
+++ b/app/Models/Labels/FieldOption.php
@@ -30,10 +30,10 @@ class FieldOption
if ($asset->relationLoaded('assignedTo')) {
// If the "assignedTo" relationship was eager loaded then the way to get the
// relationship changes from $asset->assignedTo to $asset->assigned.
- return $asset->assigned ? $asset->assigned->present()->fullName() : null;
+ return $asset->assigned ? $asset->assigned->display_name : null;
}
- return $asset->assignedTo ? $asset->assignedTo->present()->fullName() : null;
+ return $asset->assignedTo ? $asset->assignedTo->display_name : null;
}
// Handle Laravel's stupid Carbon datetime casting
diff --git a/app/Models/SnipeModel.php b/app/Models/SnipeModel.php
index f300a22bd7..f5a5a51cc0 100644
--- a/app/Models/SnipeModel.php
+++ b/app/Models/SnipeModel.php
@@ -3,6 +3,7 @@
namespace App\Models;
use App\Helpers\Helper;
+use Illuminate\Database\Eloquent\Casts\Attribute;
use Illuminate\Database\Eloquent\Model;
class SnipeModel extends Model
@@ -155,9 +156,13 @@ class SnipeModel extends Model
$this->attributes['status_id'] = $value;
}
- //
- public function getDisplayNameAttribute()
+
+ protected function displayName(): Attribute
{
- return $this->name;
+ return Attribute:: make(
+ get: fn(mixed $value) => $this->name,
+ );
}
+
+
}
diff --git a/app/Models/SnipeSCIMConfig.php b/app/Models/SnipeSCIMConfig.php
index c0d82dff43..7387569e10 100644
--- a/app/Models/SnipeSCIMConfig.php
+++ b/app/Models/SnipeSCIMConfig.php
@@ -34,6 +34,7 @@ class SnipeSCIMConfig extends \ArieTimmerman\Laravel\SCIMServer\SCIMConfig
'validations' => [
$user_prefix . 'userName' => 'required',
+ $user_prefix . 'displayName' => 'nullable|string',
$user_prefix . 'name.givenName' => 'required',
$user_prefix . 'name.familyName' => 'nullable|string',
$user_prefix . 'externalId' => 'nullable|string',
@@ -121,7 +122,7 @@ class SnipeSCIMConfig extends \ArieTimmerman\Laravel\SCIMServer\SCIMConfig
'honorificSuffix' => null
],
- 'displayName' => null,
+ 'displayName' => AttributeMapping::eloquent("display_name"),
'nickName' => null,
'profileUrl' => null,
'title' => AttributeMapping::eloquent('jobtitle'),
@@ -153,21 +154,12 @@ class SnipeSCIMConfig extends \ArieTimmerman\Laravel\SCIMServer\SCIMConfig
"primary" => AttributeMapping::constant(true)->ignoreWrite()
]],
- // Mobile and work phone numbers
- 'phoneNumbers' => [
- [
- "value" => AttributeMapping::eloquent("phone"),
- "display" => null,
- "type" => AttributeMapping::constant("work")->ignoreWrite(),
- "primary" => AttributeMapping::constant(true)->ignoreWrite(),
- ],
- [
- "value" => AttributeMapping::eloquent("mobile"),
- "display" => null,
- "type" => AttributeMapping::constant("mobile")->ignoreWrite(),
- "primary" => AttributeMapping::constant(false)->ignoreWrite()
- ]
- ],
+ 'phoneNumbers' => [[
+ "value" => AttributeMapping::eloquent("phone"),
+ "display" => null,
+ "type" => AttributeMapping::constant("work")->ignoreWrite(),
+ "primary" => AttributeMapping::constant(true)->ignoreWrite()
+ ]],
'ims' => [[
"value" => null,
diff --git a/app/Models/User.php b/app/Models/User.php
index 0c1cbe21fd..148a393dc8 100644
--- a/app/Models/User.php
+++ b/app/Models/User.php
@@ -64,6 +64,7 @@ class User extends SnipeModel implements AuthenticatableContract, AuthorizableCo
'first_name',
'jobtitle',
'last_name',
+ 'display_name',
'ldap_import',
'locale',
'location_id',
@@ -103,6 +104,8 @@ class User extends SnipeModel implements AuthenticatableContract, AuthorizableCo
protected $rules = [
'first_name' => 'required|string|min:1|max:191',
+ 'last_name' => 'nullable|string|max:191',
+ 'display_name' => 'nullable|string|max:191',
'username' => 'required|string|min:1|unique_undeleted|max:191',
'email' => 'email|nullable|max:191',
'password' => 'required|min:8',
@@ -113,9 +116,9 @@ class User extends SnipeModel implements AuthenticatableContract, AuthorizableCo
'start_date' => 'nullable|date_format:Y-m-d',
'end_date' => 'nullable|date_format:Y-m-d|after_or_equal:start_date',
'autoassign_licenses' => 'boolean',
- 'address' => 'max:191|nullable',
- 'city' => 'max:191|nullable',
- 'state' => 'min:2|max:191|nullable',
+ 'address' => 'nullable|string|max:191',
+ 'city' => 'nullable|string|max:191',
+ 'state' => 'nullable|string|max:191',
'country' => 'min:2|max:191|nullable',
'zip' => 'max:10|nullable',
'vip' => 'boolean',
@@ -132,15 +135,16 @@ class User extends SnipeModel implements AuthenticatableContract, AuthorizableCo
'address',
'city',
'country',
+ 'display_name',
'email',
'employee_num',
'first_name',
'jobtitle',
'last_name',
'locale',
+ 'mobile',
'notes',
'phone',
- 'mobile',
'state',
'username',
'website',
@@ -157,7 +161,7 @@ class User extends SnipeModel implements AuthenticatableContract, AuthorizableCo
'department' => ['name'],
'groups' => ['name'],
'company' => ['name'],
- 'manager' => ['first_name', 'last_name', 'username'],
+ 'manager' => ['first_name', 'last_name', 'username', 'display_name'],
];
@@ -196,8 +200,20 @@ class User extends SnipeModel implements AuthenticatableContract, AuthorizableCo
});
}
+ /**
+ * This overrides the SnipeModel displayName accessor to return the full name if display_name is not set
+ * @see SnipeModel::displayName()
+ * @return Attribute
+ */
- public function isAvatarExternal()
+ protected function displayName(): Attribute
+ {
+ return Attribute:: make(
+ get: fn(mixed $value) => $value ?? $this->getFullNameAttribute(),
+ );
+ }
+
+ public function isAvatarExternal() : bool
{
// Check if it's a google avatar or some external avatar
if (Str::startsWith($this->avatar, ['http://', 'https://'])) {
@@ -859,6 +875,7 @@ class User extends SnipeModel implements AuthenticatableContract, AuthorizableCo
{
return $query->where('first_name', 'LIKE', '%' . $search . '%')
->orWhere('last_name', 'LIKE', '%' . $search . '%')
+ ->orWhere('display_name', 'LIKE', '%' . $search . '%')
->orWhereMultipleColumns(
[
'users.first_name',
@@ -1068,6 +1085,7 @@ class User extends SnipeModel implements AuthenticatableContract, AuthorizableCo
->orWhere('users.jobtitle', 'LIKE', '%' . $search . '%')
->orWhere('users.employee_num', 'LIKE', '%' . $search . '%')
->orWhere('users.username', 'LIKE', '%' . $search . '%')
+ ->orWhere('users.display_name', 'LIKE', '%' . $search . '%')
->orwhereRaw('CONCAT(users.first_name," ",users.last_name) LIKE \''.$search.'%\'');
}
diff --git a/app/Notifications/AuditNotification.php b/app/Notifications/AuditNotification.php
index 47dfde30ee..d33f656ef3 100644
--- a/app/Notifications/AuditNotification.php
+++ b/app/Notifications/AuditNotification.php
@@ -64,7 +64,7 @@ use NotificationChannels\MicrosoftTeams\MicrosoftTeamsMessage;
$item = $this->params['item'];
$admin_user = $this->params['admin'];
$fields = [
- 'By' => '<'.$admin_user->present()->viewUrl().'|'.$admin_user->present()->fullName().'>',
+ 'By' => '<'.$admin_user->present()->viewUrl().'|'.$admin_user->display_name.'>',
];
array_key_exists('note', $this->params) && $fields['Notes'] = $this->params['note'];
array_key_exists('location', $this->params) && $fields['Location'] = $this->params['location'];
@@ -89,9 +89,9 @@ use NotificationChannels\MicrosoftTeams\MicrosoftTeamsMessage;
->title(class_basename(get_class($params['item'])) .' '.trans('general.audited'))
->addStartGroupToSection('activityText')
->fact(trans('mail.asset'), $item)
- ->fact(trans('general.administrator'), $admin_user->present()->viewUrl() . '|' . $admin_user->present()->fullName());
+ ->fact(trans('general.administrator'), $admin_user->present()->viewUrl() . '|' . $admin_user->display_name);
}
- $message = class_basename(get_class($params['item'])) . ' Audited By '.$admin_user->present()->fullName();
+ $message = class_basename(get_class($params['item'])) . ' Audited By '.$admin_user->display_name;
$details = [
trans('mail.asset') => htmlspecialchars_decode($item->present()->name),
trans('mail.notes') => $note ?: '',
diff --git a/app/Notifications/CheckinAccessoryNotification.php b/app/Notifications/CheckinAccessoryNotification.php
index 5354775d7e..b1ce3be29e 100644
--- a/app/Notifications/CheckinAccessoryNotification.php
+++ b/app/Notifications/CheckinAccessoryNotification.php
@@ -73,8 +73,8 @@ class CheckinAccessoryNotification extends Notification
$channel = ($this->settings->webhook_channel) ? $this->settings->webhook_channel : '';
$fields = [
- trans('general.from') => '<'.$target->present()->viewUrl().'|'.$target->present()->fullName().'>',
- trans('general.by') => '<'.$admin->present()->viewUrl().'|'.$admin->present()->fullName().'>',
+ trans('general.from') => '<'.$target->present()->viewUrl().'|'.$target->display_name.'>',
+ trans('general.by') => '<'.$admin->present()->viewUrl().'|'.$admin->display_name.'>',
];
if ($item->location) {
@@ -109,7 +109,7 @@ class CheckinAccessoryNotification extends Notification
->addStartGroupToSection('activityText')
->fact(htmlspecialchars_decode($item->present()->name), '', 'activityTitle')
->fact(trans('mail.checked_into'), $item->location->name ? $item->location->name : '')
- ->fact(trans('mail.Accessory_Checkin_Notification')." by ", $admin->present()->fullName())
+ ->fact(trans('mail.Accessory_Checkin_Notification')." by ", $admin->display_name)
->fact(trans('admin/consumables/general.remaining'), $item->numRemaining())
->fact(trans('mail.notes'), $note ?: '');
}
@@ -118,7 +118,7 @@ class CheckinAccessoryNotification extends Notification
$details = [
trans('mail.accessory_name') => htmlspecialchars_decode($item->present()->name),
trans('mail.checked_into') => $item->location->name ? $item->location->name : '',
- trans('mail.Accessory_Checkin_Notification'). ' by' => $admin->present()->fullName(),
+ trans('mail.Accessory_Checkin_Notification'). ' by' => $admin->display_name,
trans('admin/consumables/general.remaining')=> $item->numRemaining(),
trans('mail.notes') => $note ?: '',
];
diff --git a/app/Notifications/CheckinAssetNotification.php b/app/Notifications/CheckinAssetNotification.php
index 5de3ff1be8..2ff65134a9 100644
--- a/app/Notifications/CheckinAssetNotification.php
+++ b/app/Notifications/CheckinAssetNotification.php
@@ -78,7 +78,7 @@ class CheckinAssetNotification extends Notification
$channel = ($this->settings->webhook_channel) ? $this->settings->webhook_channel : '';
$fields = [
- trans('general.administrator') => '<'.$admin->present()->viewUrl().'|'.$admin->present()->fullName().'>',
+ trans('general.administrator') => '<'.$admin->present()->viewUrl().'|'.$admin->display_name.'>',
trans('general.status') => $item->assetstatus?->name,
trans('general.location') => ($item->location) ? $item->location->name : '',
];
@@ -116,7 +116,7 @@ class CheckinAssetNotification extends Notification
->addStartGroupToSection('activityText')
->fact(htmlspecialchars_decode($item->present()->name), '', 'activityText')
->fact(trans('mail.checked_into'), ($item->location) ? $item->location->name : '')
- ->fact(trans('mail.Asset_Checkin_Notification') . " by ", $admin->present()->fullName())
+ ->fact(trans('mail.Asset_Checkin_Notification') . " by ", $admin->display_name)
->fact(trans('admin/hardware/form.status'), $item->assetstatus?->name)
->fact(trans('mail.notes'), $note ?: '');
}
@@ -126,7 +126,7 @@ class CheckinAssetNotification extends Notification
$details = [
trans('mail.asset') => htmlspecialchars_decode($item->present()->name),
trans('mail.checked_into') => ($item->location) ? $item->location->name : '',
- trans('mail.Asset_Checkin_Notification')." by " => $admin->present()->fullName(),
+ trans('mail.Asset_Checkin_Notification')." by " => $admin->display_name,
trans('admin/hardware/form.status') => $item->assetstatus?->name,
trans('mail.notes') => $note ?: '',
];
diff --git a/app/Notifications/CheckinComponentNotification.php b/app/Notifications/CheckinComponentNotification.php
index 4057c26812..1532d507c7 100644
--- a/app/Notifications/CheckinComponentNotification.php
+++ b/app/Notifications/CheckinComponentNotification.php
@@ -76,8 +76,8 @@ class CheckinComponentNotification extends Notification
if ($admin) {
$fields = [
- trans('general.from') => '<'.$target->present()->viewUrl().'|'.$target->present()->fullName().'>',
- trans('general.by') => '<'.$admin->present()->viewUrl().'|'.$admin->present()->fullName().'>',
+ trans('general.from') => '<'.$target->present()->viewUrl().'|'.$target->display_name.'>',
+ trans('general.by') => '<'.$admin->present()->viewUrl().'|'.$admin->display_name.'>',
];
if ($item->location) {
@@ -90,7 +90,7 @@ class CheckinComponentNotification extends Notification
} else {
$fields = [
- 'To' => '<'.$target->present()->viewUrl().'|'.$target->present()->fullName().'>',
+ 'To' => '<'.$target->present()->viewUrl().'|'.$target->display_name.'>',
'By' => 'CLI tool',
];
}
@@ -119,16 +119,16 @@ class CheckinComponentNotification extends Notification
->title(trans('mail.Component_checkin_notification'))
->addStartGroupToSection('activityText')
->fact(htmlspecialchars_decode($item->present()->name), '', 'header')
- ->fact(trans('mail.Component_checkin_notification')." by ", $admin->present()->fullName() ?: 'CLI tool')
- ->fact(trans('mail.checkedin_from'), $target->present()->fullName())
+ ->fact(trans('mail.Component_checkin_notification')." by ", $admin->display_name ?: 'CLI tool')
+ ->fact(trans('mail.checkedin_from'), $target->display_name)
->fact(trans('admin/consumables/general.remaining'), $item->numRemaining())
->fact(trans('mail.notes'), $note ?: '');
}
$message = trans('mail.Component_checkin_notification');
$details = [
- trans('mail.checkedin_from')=> $target->present()->fullName(),
- trans('mail.Component_checkin_notification')." by " => $admin->present()->fullName() ?: 'CLI tool',
+ trans('mail.checkedin_from')=> $target->display_name,
+ trans('mail.Component_checkin_notification')." by " => $admin->display_name ?: 'CLI tool',
trans('admin/consumables/general.remaining') => $item->numRemaining(),
trans('mail.notes') => $note ?: '',
];
@@ -153,7 +153,7 @@ class CheckinComponentNotification extends Notification
Section::create(
KeyValue::create(
trans('mail.checkedin_from') ?: '',
- $target->present()->fullName() ?: '',
+ $target->display_name ?: '',
trans('admin/consumables/general.remaining').': '.$item->numRemaining(),
)
->onClick(route('components.show', $item->id))
diff --git a/app/Notifications/CheckinLicenseSeatNotification.php b/app/Notifications/CheckinLicenseSeatNotification.php
index 07c3308dbc..f0110db8ba 100644
--- a/app/Notifications/CheckinLicenseSeatNotification.php
+++ b/app/Notifications/CheckinLicenseSeatNotification.php
@@ -77,8 +77,8 @@ class CheckinLicenseSeatNotification extends Notification
if ($admin) {
$fields = [
- trans('general.from') => '<'.$target->present()->viewUrl().'|'.$target->present()->fullName().'>',
- trans('general.by') => '<'.$admin->present()->viewUrl().'|'.$admin->present()->fullName().'>',
+ trans('general.from') => '<'.$target->present()->viewUrl().'|'.$target->display_name.'>',
+ trans('general.by') => '<'.$admin->present()->viewUrl().'|'.$admin->display_name.'>',
];
if ($item->location) {
@@ -91,7 +91,7 @@ class CheckinLicenseSeatNotification extends Notification
} else {
$fields = [
- 'To' => '<'.$target->present()->viewUrl().'|'.$target->present()->fullName().'>',
+ 'To' => '<'.$target->present()->viewUrl().'|'.$target->display_name.'>',
'By' => 'CLI tool',
];
}
@@ -120,17 +120,17 @@ class CheckinLicenseSeatNotification extends Notification
->title(trans('mail.License_Checkin_Notification'))
->addStartGroupToSection('activityText')
->fact(htmlspecialchars_decode($item->present()->name), '', 'header')
- ->fact(trans('mail.License_Checkin_Notification')." by ", $admin->present()->fullName() ?: 'CLI tool')
- ->fact(trans('mail.checkedin_from'), $target->present()->fullName())
+ ->fact(trans('mail.License_Checkin_Notification')." by ", $admin->display_name ?: 'CLI tool')
+ ->fact(trans('mail.checkedin_from'), $target->display_name)
->fact(trans('admin/consumables/general.remaining'), $item->availCount()->count())
->fact(trans('mail.notes'), $note ?: '');
}
$message = trans('mail.License_Checkin_Notification');
$details = [
- trans('mail.checkedin_from')=> $target->present()->fullName(),
+ trans('mail.checkedin_from')=> $target->display_name,
trans('mail.license_for') => htmlspecialchars_decode($item->present()->name),
- trans('mail.License_Checkin_Notification')." by " => $admin->present()->fullName() ?: 'CLI tool',
+ trans('mail.License_Checkin_Notification')." by " => $admin->display_name ?: 'CLI tool',
trans('admin/consumables/general.remaining') => $item->availCount()->count(),
trans('mail.notes') => $note ?: '',
];
@@ -155,7 +155,7 @@ class CheckinLicenseSeatNotification extends Notification
Section::create(
KeyValue::create(
trans('mail.checkedin_from') ?: '',
- $target->present()->fullName() ?: '',
+ $target->display_name ?: '',
trans('admin/consumables/general.remaining').': '.$item->availCount()->count(),
)
->onClick(route('licenses.show', $item->id))
diff --git a/app/Notifications/CheckoutAccessoryNotification.php b/app/Notifications/CheckoutAccessoryNotification.php
index 016bfc526c..22dc78b2b3 100644
--- a/app/Notifications/CheckoutAccessoryNotification.php
+++ b/app/Notifications/CheckoutAccessoryNotification.php
@@ -100,8 +100,8 @@ class CheckoutAccessoryNotification extends Notification
$channel = ($this->settings->webhook_channel) ? $this->settings->webhook_channel : '';
$fields = [
- trans('general.to') => '<'.$target->present()->viewUrl().'|'.$target->present()->fullName().'>',
- trans('general.by') => '<'.$admin->present()->viewUrl().'|'.$admin->present()->fullName().'>',
+ trans('general.to') => '<'.$target->present()->viewUrl().'|'.$target->display_name.'>',
+ trans('general.by') => '<'.$admin->present()->viewUrl().'|'.$admin->display_name.'>',
];
if ($item->location) {
@@ -140,7 +140,7 @@ class CheckoutAccessoryNotification extends Notification
->fact(trans('mail.assigned_to'), $target->present()->name)
->fact(trans('general.qty'), $this->checkout_qty)
->fact(trans('mail.checkedout_from'), $item->location->name ? $item->location->name : '')
- ->fact(trans('mail.Accessory_Checkout_Notification') . " by ", $admin->present()->fullName())
+ ->fact(trans('mail.Accessory_Checkout_Notification') . " by ", $admin->display_name)
->fact(trans('admin/consumables/general.remaining'), $item->numRemaining())
->fact(trans('mail.notes'), $note ?: '');
}
@@ -151,7 +151,7 @@ class CheckoutAccessoryNotification extends Notification
trans('mail.accessory_name') => htmlspecialchars_decode($item->present()->name),
trans('general.qty') => $this->checkout_qty,
trans('mail.checkedout_from') => $item->location->name ? $item->location->name : '',
- trans('mail.Accessory_Checkout_Notification'). ' by' => $admin->present()->fullName(),
+ trans('mail.Accessory_Checkout_Notification'). ' by' => $admin->display_name,
trans('admin/consumables/general.remaining')=> $item->numRemaining(),
trans('mail.notes') => $note ?: '',
];
diff --git a/app/Notifications/CheckoutAssetNotification.php b/app/Notifications/CheckoutAssetNotification.php
index 8cdfbdd046..70ab74c60e 100644
--- a/app/Notifications/CheckoutAssetNotification.php
+++ b/app/Notifications/CheckoutAssetNotification.php
@@ -93,8 +93,8 @@ class CheckoutAssetNotification extends Notification
$channel = ($this->settings->webhook_channel) ? $this->settings->webhook_channel : '';
$fields = [
- trans('general.to') => '<'.$target->present()->viewUrl().'|'.$target->present()->fullName().'>',
- trans('general.by') => '<'.$admin->present()->viewUrl().'|'.$admin->present()->fullName().'>',
+ trans('general.to') => '<'.$target->present()->viewUrl().'|'.$target->display_name.'>',
+ trans('general.by') => '<'.$admin->present()->viewUrl().'|'.$admin->display_name.'>',
];
if ($item->location) {
@@ -135,7 +135,7 @@ class CheckoutAssetNotification extends Notification
->addStartGroupToSection('activityText')
->fact(trans('mail.assigned_to'), $target->present()->name)
->fact(htmlspecialchars_decode($item->present()->name), '', 'activityText')
- ->fact(trans('mail.Asset_Checkout_Notification') . " by ", $admin->present()->fullName())
+ ->fact(trans('mail.Asset_Checkout_Notification') . " by ", $admin->display_name)
->fact(trans('mail.notes'), $note ?: '');
}
@@ -143,7 +143,7 @@ class CheckoutAssetNotification extends Notification
$details = [
trans('mail.assigned_to') => $target->present()->name,
trans('mail.asset') => htmlspecialchars_decode($item->present()->name),
- trans('mail.Asset_Checkout_Notification'). ' by' => $admin->present()->fullName(),
+ trans('mail.Asset_Checkout_Notification'). ' by' => $admin->display_name,
trans('mail.notes') => $note ?: '',
];
return array($message, $details);
diff --git a/app/Notifications/CheckoutComponentNotification.php b/app/Notifications/CheckoutComponentNotification.php
index fab303fb52..11f77e9d47 100644
--- a/app/Notifications/CheckoutComponentNotification.php
+++ b/app/Notifications/CheckoutComponentNotification.php
@@ -80,8 +80,8 @@ class CheckoutComponentNotification extends Notification
$channel = ($this->settings->webhook_channel) ? $this->settings->webhook_channel : '';
$fields = [
- trans('general.to') => '<'.$target->present()->viewUrl().'|'.$target->present()->fullName().'>',
- trans('general.by') => '<'.$admin->present()->viewUrl().'|'.$admin->present()->fullName().'>',
+ trans('general.to') => '<'.$target->present()->viewUrl().'|'.$target->display_name.'>',
+ trans('general.by') => '<'.$admin->present()->viewUrl().'|'.$admin->display_name.'>',
];
if ($item->location) {
@@ -117,17 +117,17 @@ class CheckoutComponentNotification extends Notification
->title(trans('mail.Component_checkout_notification'))
->addStartGroupToSection('activityText')
->fact(htmlspecialchars_decode($item->present()->name), '', 'activityTitle')
- ->fact(trans('mail.Component_checkout_notification')." by ", $admin->present()->fullName())
- ->fact(trans('mail.assigned_to'), $target->present()->fullName())
+ ->fact(trans('mail.Component_checkout_notification')." by ", $admin->display_name)
+ ->fact(trans('mail.assigned_to'), $target->display_name)
->fact(trans('admin/consumables/general.remaining'), $item->numRemaining())
->fact(trans('mail.notes'), $note ?: '');
}
$message = trans('mail.Component_checkout_notification');
$details = [
- trans('mail.assigned_to') => $target->present()->fullName(),
+ trans('mail.assigned_to') => $target->display_name,
trans('mail.item') => htmlspecialchars_decode($item->present()->name),
- trans('mail.Component_checkout_notification').' by' => $admin->present()->fullName(),
+ trans('mail.Component_checkout_notification').' by' => $admin->display_name,
trans('admin/consumables/general.remaining') => $item->numRemaining(),
trans('mail.notes') => $note ?: '',
];
@@ -152,7 +152,7 @@ class CheckoutComponentNotification extends Notification
Section::create(
KeyValue::create(
trans('mail.assigned_to') ?: '',
- $target->present()->fullName() ?: '',
+ $target->display_name ?: '',
trans('admin/consumables/general.remaining').': '.$item->numRemaining(),
)
->onClick(route('api.assets.show', $target->id))
diff --git a/app/Notifications/CheckoutConsumableNotification.php b/app/Notifications/CheckoutConsumableNotification.php
index e8db8b8bd1..0274bbeecf 100644
--- a/app/Notifications/CheckoutConsumableNotification.php
+++ b/app/Notifications/CheckoutConsumableNotification.php
@@ -80,8 +80,8 @@ class CheckoutConsumableNotification extends Notification
$channel = ($this->settings->webhook_channel) ? $this->settings->webhook_channel : '';
$fields = [
- trans('general.to') => '<'.$target->present()->viewUrl().'|'.$target->present()->fullName().'>',
- trans('general.by') => '<'.$admin->present()->viewUrl().'|'.$admin->present()->fullName().'>',
+ trans('general.to') => '<'.$target->present()->viewUrl().'|'.$target->display_name.'>',
+ trans('general.by') => '<'.$admin->present()->viewUrl().'|'.$admin->display_name.'>',
];
if ($item->location) {
@@ -117,17 +117,17 @@ class CheckoutConsumableNotification extends Notification
->title(trans('mail.Consumable_checkout_notification'))
->addStartGroupToSection('activityText')
->fact(htmlspecialchars_decode($item->present()->name), '', 'activityTitle')
- ->fact(trans('mail.Consumable_checkout_notification')." by ", $admin->present()->fullName())
- ->fact(trans('mail.assigned_to'), $target->present()->fullName())
+ ->fact(trans('mail.Consumable_checkout_notification')." by ", $admin->display_name)
+ ->fact(trans('mail.assigned_to'), $target->display_name)
->fact(trans('admin/consumables/general.remaining'), $item->numRemaining())
->fact(trans('mail.notes'), $note ?: '');
}
$message = trans('mail.Consumable_checkout_notification');
$details = [
- trans('mail.assigned_to') => $target->present()->fullName(),
+ trans('mail.assigned_to') => $target->display_name,
trans('mail.item') => htmlspecialchars_decode($item->present()->name),
- trans('mail.Consumable_checkout_notification').' by' => $admin->present()->fullName(),
+ trans('mail.Consumable_checkout_notification').' by' => $admin->display_name,
trans('admin/consumables/general.remaining') => $item->numRemaining(),
trans('mail.notes') => $note ?: '',
];
@@ -152,7 +152,7 @@ class CheckoutConsumableNotification extends Notification
Section::create(
KeyValue::create(
trans('mail.assigned_to') ?: '',
- $target->present()->fullName() ?: '',
+ $target->display_name ?: '',
trans('admin/consumables/general.remaining').': '.$item->numRemaining(),
)
->onClick(route('users.show', $target->id))
diff --git a/app/Notifications/CheckoutLicenseSeatNotification.php b/app/Notifications/CheckoutLicenseSeatNotification.php
index fa00421885..4fc2ab7def 100644
--- a/app/Notifications/CheckoutLicenseSeatNotification.php
+++ b/app/Notifications/CheckoutLicenseSeatNotification.php
@@ -78,8 +78,8 @@ class CheckoutLicenseSeatNotification extends Notification
$channel = ($this->settings->webhook_channel) ? $this->settings->webhook_channel : '';
$fields = [
- trans('general.to') => '<'.$target->present()->viewUrl().'|'.$target->present()->fullName().'>',
- trans('general.by') => '<'.$admin->present()->viewUrl().'|'.$admin->present()->fullName().'>',
+ trans('general.to') => '<'.$target->present()->viewUrl().'|'.$target->display_name.'>',
+ trans('general.by') => '<'.$admin->present()->viewUrl().'|'.$admin->display_name.'>',
];
if ($item->location) {
@@ -115,17 +115,17 @@ class CheckoutLicenseSeatNotification extends Notification
->title(trans('mail.License_Checkout_Notification'))
->addStartGroupToSection('activityText')
->fact(htmlspecialchars_decode($item->present()->name), '', 'activityTitle')
- ->fact(trans('mail.License_Checkout_Notification')." by ", $admin->present()->fullName())
- ->fact(trans('mail.assigned_to'), $target->present()->fullName())
+ ->fact(trans('mail.License_Checkout_Notification')." by ", $admin->display_name)
+ ->fact(trans('mail.assigned_to'), $target->display_name)
->fact(trans('admin/consumables/general.remaining'), $item->availCount()->count())
->fact(trans('mail.notes'), $note ?: '');
}
$message = trans('mail.License_Checkout_Notification');
$details = [
- trans('mail.assigned_to') => $target->present()->fullName(),
+ trans('mail.assigned_to') => $target->display_name,
trans('mail.license_for') => htmlspecialchars_decode($item->present()->name),
- trans('mail.License_Checkout_Notification').' by' => $admin->present()->fullName(),
+ trans('mail.License_Checkout_Notification').' by' => $admin->display_name,
trans('admin/consumables/general.remaining') => $item->availCount()->count(),
trans('mail.notes') => $note ?: '',
];
diff --git a/app/Notifications/RequestAssetCancelation.php b/app/Notifications/RequestAssetCancelation.php
index 6c06ede3ca..0211b17e4e 100644
--- a/app/Notifications/RequestAssetCancelation.php
+++ b/app/Notifications/RequestAssetCancelation.php
@@ -79,7 +79,7 @@ class RequestAssetCancelation extends Notification
$fields = [
'QTY' => $qty,
- 'Canceled By' => '<'.$target->present()->viewUrl().'|'.$target->present()->fullName().'>',
+ 'Canceled By' => '<'.$target->present()->viewUrl().'|'.$target->display_name.'>',
];
if (($this->expected_checkin) && ($this->expected_checkin != '')) {
diff --git a/app/Notifications/RequestAssetNotification.php b/app/Notifications/RequestAssetNotification.php
index d2001f2e13..e3c99c56f6 100644
--- a/app/Notifications/RequestAssetNotification.php
+++ b/app/Notifications/RequestAssetNotification.php
@@ -78,7 +78,7 @@ class RequestAssetNotification extends Notification
$fields = [
'QTY' => $qty,
- 'Requested By' => '<'.$target->present()->viewUrl().'|'.$target->present()->fullName().'>',
+ 'Requested By' => '<'.$target->present()->viewUrl().'|'.$target->display_name.'>',
];
return (new SlackMessage)
diff --git a/app/Presenters/ComponentPresenter.php b/app/Presenters/ComponentPresenter.php
index 254e7f4110..32e63ac713 100644
--- a/app/Presenters/ComponentPresenter.php
+++ b/app/Presenters/ComponentPresenter.php
@@ -191,7 +191,7 @@ class ComponentPresenter extends Presenter
*/
public function nameUrl()
{
- return (string) link_to_route('components.show', e($this->name), $this->id);
+ return (string) link_to_route('consumables.show', e($this->name), $this->id);
}
/**
@@ -200,6 +200,6 @@ class ComponentPresenter extends Presenter
*/
public function viewUrl()
{
- return route('components.show', $this->id);
+ return route('accessories.show', $this->id);
}
}
diff --git a/app/Presenters/Presenter.php b/app/Presenters/Presenter.php
index 85fe2338ae..13bae66ecd 100644
--- a/app/Presenters/Presenter.php
+++ b/app/Presenters/Presenter.php
@@ -3,6 +3,7 @@
namespace App\Presenters;
use App\Models\SnipeModel;
+use Illuminate\Database\Eloquent\Casts\Attribute;
abstract class Presenter
{
@@ -69,10 +70,30 @@ abstract class Presenter
return '';
}
- public function name()
- {
- return $this->model->name;
- }
+// public function name()
+// {
+// return $this->model->name;
+// }
+//
+// public function display_name()
+// {
+// return $this->model->display_name;
+// }
+
+
+// protected function displayName(): Attribute
+// {
+// // This override should only kick in if the model has a display_name prope
+// if ($this->getRawOriginal('display_name')) {
+// return Attribute:: make (
+// get: fn(mixed $value) => 'Poop:'.$this->display_name
+// );
+// }
+//
+// return Attribute:: make(
+// get: fn(mixed $value) => 'Fart: '.$this->name,
+// );
+// }
public function __get($property)
{
@@ -80,7 +101,7 @@ abstract class Presenter
return $this->{$property}();
}
- return e($this->model->{$property});
+ return $this->model->{$property};
}
public function __call($method, $args)
diff --git a/app/Presenters/UserPresenter.php b/app/Presenters/UserPresenter.php
index c60457ea05..296fafe568 100644
--- a/app/Presenters/UserPresenter.php
+++ b/app/Presenters/UserPresenter.php
@@ -79,6 +79,14 @@ class UserPresenter extends Presenter
'visible' => false,
'formatter' => 'usersLinkFormatter',
],
+ [
+ 'field' => 'display_name',
+ 'searchable' => true,
+ 'sortable' => true,
+ 'switchable' => false,
+ 'title' => trans('admin/users/table.display_name'),
+ 'visible' => true,
+ ],
[
'field' => 'jobtitle',
'searchable' => true,
@@ -191,6 +199,7 @@ class UserPresenter extends Presenter
'visible' => true,
'formatter' => 'usernameRoleLinkFormatter',
],
+
[
'field' => 'employee_num',
'searchable' => true,
@@ -447,20 +456,23 @@ class UserPresenter extends Presenter
*
* @return string
*/
- public function fullName()
- {
- return html_entity_decode($this->first_name.' '.$this->last_name, ENT_QUOTES | ENT_XML1, 'UTF-8');
- }
+// public function fullName()
+// {
+// if ($this->display_name) {
+// return 'kjdfh'.html_entity_decode($this->display_name, ENT_QUOTES | ENT_XML1, 'UTF-8');
+// }
+// return 'roieuoe'.html_entity_decode($this->first_name.' '.$this->last_name, ENT_QUOTES | ENT_XML1, 'UTF-8');
+// }
- /**
- * Standard accessor.
- * @TODO Remove presenter::fullName() entirely?
- * @return string
- */
- public function name()
- {
- return $this->fullName();
- }
+// /**
+// * Standard accessor.
+// * @TODO Remove presenter::fullName() entirely?
+// * @return string
+// */
+// public function name()
+// {
+// return $this->fullName();
+// }
diff --git a/app/Providers/BreadcrumbsServiceProvider.php b/app/Providers/BreadcrumbsServiceProvider.php
index e7b41a8fca..a5092b3ded 100644
--- a/app/Providers/BreadcrumbsServiceProvider.php
+++ b/app/Providers/BreadcrumbsServiceProvider.php
@@ -74,12 +74,12 @@ class BreadcrumbsServiceProvider extends ServiceProvider
Breadcrumbs::for('hardware.show', fn (Trail $trail, Asset $asset) =>
$trail->parent('hardware.index', route('hardware.index'))
- ->push($asset->present()->fullName(), route('hardware.show', $asset))
+ ->push($asset->display_name, route('hardware.show', $asset))
);
Breadcrumbs::for('hardware.edit', fn (Trail $trail, Asset $asset) =>
$trail->parent('hardware.index', route('hardware.index'))
- ->push($asset->present()->fullName(), route('hardware.show', $asset))
+ ->push($asset->display_name, route('hardware.show', $asset))
->push(trans('admin/hardware/general.edit'))
);
@@ -579,7 +579,7 @@ class BreadcrumbsServiceProvider extends ServiceProvider
Breadcrumbs::for('users.show', fn (Trail $trail, User $user) =>
$trail->parent('users.index', route('users.index'))
- ->push($user->getFullNameAttribute() ?? 'Missing Username!', route('users.show', $user))
+ ->push($user->display_name ?? 'Missing Username!', route('users.show', $user))
);
Breadcrumbs::for('users.edit', fn (Trail $trail, User $user) =>
diff --git a/database/factories/UserFactory.php b/database/factories/UserFactory.php
index b9326fd83a..989fad08f2 100644
--- a/database/factories/UserFactory.php
+++ b/database/factories/UserFactory.php
@@ -28,8 +28,9 @@ class UserFactory extends Factory
'email' => $this->faker->safeEmail(),
'employee_num' => $this->faker->numberBetween(3500, 35050),
'first_name' => $this->faker->firstName(),
- 'jobtitle' => $this->faker->jobTitle(),
'last_name' => $this->faker->lastName(),
+ 'display_name' => null,
+ 'jobtitle' => $this->faker->jobTitle(),
'locale' => 'en-US',
'notes' => 'Created by DB seeder',
'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password
diff --git a/database/migrations/2025_08_19_114742_add_display_name_to_users.php b/database/migrations/2025_08_19_114742_add_display_name_to_users.php
new file mode 100644
index 0000000000..d55e755d3a
--- /dev/null
+++ b/database/migrations/2025_08_19_114742_add_display_name_to_users.php
@@ -0,0 +1,32 @@
+text('display_name')->after('last_name')->nullable()->default(null);
+ }
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ */
+ public function down(): void
+ {
+ Schema::table('users', function (Blueprint $table) {
+ if (Schema::hasColumn('users', 'display_name')) {
+ $table->dropColumn('display_name');
+ }
+ });
+ }
+};
diff --git a/database/migrations/2025_08_19_174823_add_display_name_to_ldap_settings.php b/database/migrations/2025_08_19_174823_add_display_name_to_ldap_settings.php
new file mode 100644
index 0000000000..fb980af6dd
--- /dev/null
+++ b/database/migrations/2025_08_19_174823_add_display_name_to_ldap_settings.php
@@ -0,0 +1,82 @@
+string('ldap_display_name', 191)->after('ldap_fname_field')->nullable()->default(null);
+ }
+
+ if (!Schema::hasColumn('settings', 'ldap_zip')) {
+ $table->string('ldap_zip', 191)->after('ldap_manager')->nullable()->default(null);
+ }
+
+ if (!Schema::hasColumn('settings', 'ldap_state')) {
+ $table->string('ldap_state', 191)->after('ldap_manager')->nullable()->default(null);
+ }
+
+ if (!Schema::hasColumn('settings', 'ldap_city')) {
+ $table->string('ldap_city', 191)->after('ldap_manager')->nullable()->default(null);
+ }
+
+ if (!Schema::hasColumn('settings', 'ldap_address')) {
+ $table->string('ldap_address', 191)->after('ldap_manager')->nullable()->default(null);
+ }
+
+ if (!Schema::hasColumn('settings', 'ldap_mobile')) {
+ $table->string('ldap_mobile', 191)->after('ldap_phone_field')->nullable()->default(null);
+ }
+
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ */
+ public function down(): void
+ {
+ Schema::table('settings', function (Blueprint $table) {
+ if (Schema::hasColumn('settings', 'ldap_display_name')) {
+ $table->dropColumn('ldap_display_name');
+ }
+ });
+
+ Schema::table('settings', function (Blueprint $table) {
+ if (Schema::hasColumn('settings', 'ldap_zip')) {
+ $table->dropColumn('ldap_zip');
+ }
+ });
+ Schema::table('settings', function (Blueprint $table) {
+ if (Schema::hasColumn('settings', 'ldap_address')) {
+ $table->dropColumn('ldap_address');
+ }
+ });
+ Schema::table('settings', function (Blueprint $table) {
+ if (Schema::hasColumn('settings', 'ldap_city')) {
+ $table->dropColumn('ldap_city');
+ }
+ });
+ Schema::table('settings', function (Blueprint $table) {
+ if (Schema::hasColumn('settings', 'ldap_state')) {
+ $table->dropColumn('ldap_state');
+ }
+ });
+ Schema::table('settings', function (Blueprint $table) {
+ if (Schema::hasColumn('settings', 'ldap_mobile')) {
+ $table->dropColumn('ldap_mobile');
+ }
+ });
+
+
+ }
+};
diff --git a/resources/lang/en-US/admin/settings/general.php b/resources/lang/en-US/admin/settings/general.php
index 4e8143a517..32417af741 100644
--- a/resources/lang/en-US/admin/settings/general.php
+++ b/resources/lang/en-US/admin/settings/general.php
@@ -93,11 +93,11 @@ return [
'ldap_integration' => 'LDAP Integration',
'ldap_settings' => 'LDAP Settings',
'ldap_client_tls_cert_help' => 'Client-Side TLS Certificate and Key for LDAP connections are usually only useful in Google Workspace configurations with "Secure LDAP." Both are required.',
- 'ldap_location' => 'LDAP Location',
-'ldap_location_help' => 'The Ldap Location field should be used if an OU is not being used in the Base Bind DN. Leave this blank if an OU search is being used.',
+ 'ldap_location' => 'LDAP Location Field',
+'ldap_location_help' => 'The LDAP Location field should be used if an OU is not being used in the Base Bind DN. Leave this blank if an OU search is being used.',
'ldap_login_test_help' => 'Enter a valid LDAP username and password from the base DN you specified above to test whether your LDAP login is configured correctly. YOU MUST SAVE YOUR UPDATED LDAP SETTINGS FIRST.',
'ldap_login_sync_help' => 'This only tests that LDAP can sync correctly. If your LDAP Authentication query is not correct, users may still not be able to login. YOU MUST SAVE YOUR UPDATED LDAP SETTINGS FIRST.',
- 'ldap_manager' => 'LDAP Manager',
+ 'ldap_manager' => 'LDAP Manager Field',
'ldap_server' => 'LDAP Server',
'ldap_server_help' => 'This should start with ldap:// (for unencrypted) or ldaps:// (for TLS or SSL)',
'ldap_server_cert' => 'LDAP SSL certificate validation',
@@ -106,26 +106,33 @@ return [
'ldap_tls' => 'Use TLS',
'ldap_tls_help' => 'This should be checked only if you are running STARTTLS on your LDAP server. ',
'ldap_uname' => 'LDAP Bind Username',
- 'ldap_dept' => 'LDAP Department',
- 'ldap_phone' => 'LDAP Telephone Number',
- 'ldap_jobtitle' => 'LDAP Job Title',
- 'ldap_country' => 'LDAP Country',
+ 'ldap_dept' => 'LDAP Department Field',
+ 'ldap_phone' => 'LDAP Phone Number Field',
+ 'ldap_jobtitle' => 'LDAP Job Title Field',
+ 'ldap_country' => 'LDAP Country Field',
'ldap_pword' => 'LDAP Bind Password',
'ldap_basedn' => 'Base Bind DN',
'ldap_filter' => 'LDAP Filter',
'ldap_pw_sync' => 'Cache LDAP Passwords',
'ldap_pw_sync_help' => 'Uncheck this box if you do not wish to keep LDAP passwords cached as local hashed passwords. Disabling this means that your users may not be able to login if your LDAP server is unreachable for some reason.',
- 'ldap_username_field' => 'Username Field',
- 'ldap_lname_field' => 'Last Name',
- 'ldap_fname_field' => 'LDAP First Name',
+ 'ldap_username_field' => 'LDAP Username Field',
+ 'ldap_display_name' => 'LDAP Display Name Field',
+ 'ldap_display_name_help' => 'If you have a separate displayName field in your LDAP/AD, map it here and it will be used for displaying users within Snipe-IT.',
+ 'ldap_lname_field' => 'LDAP Last Name Field',
+ 'ldap_fname_field' => 'LDAP First Name Field',
'ldap_auth_filter_query' => 'LDAP Authentication query',
'ldap_version' => 'LDAP Version',
'ldap_active_flag' => 'LDAP Active Flag',
'ldap_activated_flag_help' => 'This value is used to determine whether a synced user can login to Snipe-IT. It does not affect the ability to check items in or out to them, and should be the attribute name within your AD/LDAP, not the value.
If this field is set to a field name that does not exist in your AD/LDAP, or the value in the AD/LDAP field is set to 0 or false, user login will be disabled. If the value in the AD/LDAP field is set to 1 or true or any other text means the user can log in. When the field is blank in your AD, we respect the userAccountControl attribute, which usually allows non-suspended users to log in.',
'ldap_invert_active_flag' => 'LDAP Invert Active Flag',
'ldap_invert_active_flag_help' => 'If enabled: when the value returned by LDAP Active Flag is 0 or false the user account will be active.',
- 'ldap_emp_num' => 'LDAP Employee Number',
- 'ldap_email' => 'LDAP Email',
+ 'ldap_emp_num' => 'LDAP Employee Number Field',
+ 'ldap_email' => 'LDAP Email Field',
+ 'ldap_mobile' => 'LDAP Mobile Field',
+ 'ldap_address' => 'LDAP Address Field',
+ 'ldap_city' => 'LDAP City Field',
+ 'ldap_state' => 'LDAP State/Province Field',
+ 'ldap_zip' => 'LDAP Postal Code Field',
'ldap_test' => 'Test LDAP',
'ldap_test_sync' => 'Test LDAP Synchronization',
'license' => 'Software License',
@@ -462,21 +469,24 @@ return [
'legends' => [
- 'scoping' => 'Scoping',
- 'formats' => 'Default Formats',
- 'profiles' => 'User Profiles',
- 'eula' => 'EULA & Acceptance Preferences',
- 'misc_display' => 'Miscellaneous Display Options',
- 'email' => 'Email Preferences',
'checkin' => 'Checkin Preferences',
- 'dashboard' => 'Login & Dashboard Preferences',
- 'misc' => 'Miscellaneous',
- 'logos' => 'Logos & Display',
'colors' => 'Colors & Skins',
+ 'dashboard' => 'Login & Dashboard Preferences',
+ 'email' => 'Email Preferences',
+ 'eula' => 'EULA & Acceptance Preferences',
'footer' => 'Footer Preferences',
- 'security' => 'Security Preferences',
+ 'formats' => 'Default Formats',
'general' => 'General',
'intervals' => 'Intervals & Thresholds',
+ 'logos' => 'Logos & Display',
+ 'mapping' => 'LDAP Field Mapping',
+ 'test' => 'Test LDAP Connection',
+ 'misc' => 'Miscellaneous',
+ 'misc_display' => 'Miscellaneous Display Options',
+ 'profiles' => 'User Profiles',
+ 'server' => 'Server Settings',
+ 'scoping' => 'Scoping',
+ 'security' => 'Security Preferences',
],
diff --git a/resources/lang/en-US/admin/users/table.php b/resources/lang/en-US/admin/users/table.php
index e7a5aa6490..2e2f9c7995 100644
--- a/resources/lang/en-US/admin/users/table.php
+++ b/resources/lang/en-US/admin/users/table.php
@@ -35,6 +35,7 @@ return array(
'total_assets_cost' => "Total Assets Cost",
'updateuser' => 'Update User',
'username' => 'Username',
+ 'display_name' => 'Display Name',
'user_deleted_text' => 'This user has been marked as deleted.',
'username_note' => '(This is used for Active Directory binding only, not for login.)',
'cloneuser' => 'Clone User',
diff --git a/resources/views/account/profile.blade.php b/resources/views/account/profile.blade.php
index abf463ad94..b4aea49918 100755
--- a/resources/views/account/profile.blade.php
+++ b/resources/views/account/profile.blade.php
@@ -139,7 +139,7 @@
{!! $errors->first('gravatar', '') !!}
-
+
{!! trans('general.gravatar_url') !!}