Merge pull request #17709 from grokability/add-display-name-to-users-fixed

Added display name to users for LDAP/SCIM, added new sync fields (replaced #17650)
This commit is contained in:
snipe
2025-08-26 12:39:25 +01:00
committed by GitHub
91 changed files with 1523 additions and 1128 deletions
+21
View File
@@ -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'];
}
@@ -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++;
@@ -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;
}
@@ -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,
];
}
@@ -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,
+14 -6
View File
@@ -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');
}
@@ -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',
@@ -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,
+3 -3
View File
@@ -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();
}
@@ -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');
@@ -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(),
@@ -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();
@@ -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'),
@@ -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,
@@ -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'),
+2 -2
View File
@@ -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),
@@ -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'),
@@ -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'),
@@ -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'),
@@ -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'),
@@ -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,
@@ -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')
+1 -1
View File
@@ -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'),
@@ -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'),
@@ -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'),
@@ -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'),
@@ -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'),
+1 -1
View File
@@ -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),
@@ -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'),
+9 -7
View File
@@ -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),
+3
View File
@@ -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;
+1
View File
@@ -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'));
+8
View File
@@ -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',
+2 -2
View File
@@ -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 = '';
+2 -2
View File
@@ -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;
}
}
+2 -2
View File
@@ -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
+8 -3
View File
@@ -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,
);
}
}
+8 -16
View File
@@ -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,
+24 -6
View File
@@ -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.'%\'');
}
+3 -3
View File
@@ -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 ?: '',
@@ -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 ?: '',
];
@@ -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 ?: '',
];
@@ -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))
@@ -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))
@@ -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 ?: '',
];
@@ -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);
@@ -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))
@@ -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))
@@ -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 ?: '',
];
@@ -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 != '')) {
@@ -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)
+2 -2
View File
@@ -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);
}
}
+26 -5
View File
@@ -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)
+25 -13
View File
@@ -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();
// }
+3 -3
View File
@@ -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) =>
+2 -1
View File
@@ -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
@@ -0,0 +1,32 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('users', function (Blueprint $table) {
if (!Schema::hasColumn('users', 'display_name')) {
$table->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');
}
});
}
};
@@ -0,0 +1,82 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('settings', function (Blueprint $table) {
if (!Schema::hasColumn('settings', 'ldap_display_name')) {
$table->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');
}
});
}
};
+32 -22
View File
@@ -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 <strong>an OU is not being used in the Base Bind DN.</strong> 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 <strong>an OU is not being used in the Base Bind DN.</strong> 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. <strong>It does not affect the ability to check items in or out to them</strong>, and should be the <strong>attribute name</strong> within your AD/LDAP, <strong>not the value</strong>. <br><br>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 <code>0</code> or <code>false</code>, <strong>user login will be disabled</strong>. If the value in the AD/LDAP field is set to <code>1</code> or <code>true</code> or <em>any other text</em> means the user can log in. When the field is blank in your AD, we respect the <code>userAccountControl</code> 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 <code>0</code> or <code>false</code> 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',
],
@@ -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',
+1 -1
View File
@@ -139,7 +139,7 @@
<input class="form-control" type="text" name="gravatar" id="gravatar" value="{{ old('gravatar', $user->gravatar) }}" />
{!! $errors->first('gravatar', '<span class="alert-msg" aria-hidden="true"><i class="fas fa-times" aria-hidden="true"></i> :message</span>') !!}
<p style="padding-top: 3px;">
<img src="//secure.gravatar.com/avatar/{{ md5(strtolower(trim($user->gravatar))) }}" width="30" height="30" alt="{{ $user->present()->fullName() }} avatar image">
<img src="//secure.gravatar.com/avatar/{{ md5(strtolower(trim($user->gravatar))) }}" width="30" height="30" alt="{{ $user->display_name }} avatar image">
{!! trans('general.gravatar_url') !!}
</p>
</div>
@@ -2,7 +2,7 @@
{{-- Page title --}}
@section('title')
{{ trans('general.hello_name', array('name' => $user->present()->getFullNameAttribute())) }}
{{ trans('general.hello_name', array('name' => $user->display_name)) }}
@parent
@stop
@@ -37,7 +37,7 @@
<select name="user_id" id="user_id" class="form-control select2" onchange="this.form.submit()" style="width: 250px; display: inline-block;">
@foreach ($subordinates as $subordinate)
<option value="{{ $subordinate->id }}" {{ (int)$selectedUserId === (int)$subordinate->id ? ' selected' : '' }}>
{{ $subordinate->present()->fullName() }}
{{ $subordinate->display_name }}
@if ($subordinate->id == auth()->id())
({{ trans('general.me') }})
@endif
@@ -133,7 +133,7 @@
<div class="col-md-3 col-xs-12 col-sm-push-9">
<div class="col-md-12 text-center">
<img src="{{ $user->present()->gravatar() }}" class=" img-thumbnail hidden-print" style="margin-bottom: 20px;" alt="{{ $user->present()->fullName() }}" alt="User avatar">
<img src="{{ $user->present()->gravatar() }}" class=" img-thumbnail hidden-print" style="margin-bottom: 20px;" alt="{{ $user->display_name }}" alt="User avatar">
</div>
@can('self.profile')
<div class="col-md-12">
@@ -204,7 +204,7 @@
{{ trans('admin/users/table.name') }}
</div>
<div class="col-md-9 col-sm-2">
{{ $user->present()->fullName() }}
{{ $user->display_name }}
</div>
</div>
@@ -309,9 +309,7 @@
{{ trans('admin/users/table.manager') }}
</div>
<div class="col-md-9">
<a href="{{ route('users.show', $user->manager->id) }}">
{{ $user->manager->getFullNameAttribute() }}
</a>
<x-full-user-name :user="$user->manager" />
</div>
</div>
+9 -13
View File
@@ -2,26 +2,22 @@
'user'
])
@if($user)
@php
$fullName = $user->present()->fullName();
@endphp
@if ($user)
@can('view', $user)
@if(! $user->trashed())
{{-- if the user is in database but soft-deleted --}}
<a href="{{ route('users.show', $user->id) }}">{{ $fullName }}</a>
{{-- if the user is in database, the viewer CAN see them, and the user is not deleted --}}
<a href="{{ route('users.show', $user->id) }}">{{ $user->display_name }}</a>
@else
{{-- if the user exists --}}
<s><a href="{{ route('users.show', $user->id) }}">{{ $fullName }}</a></s>
{{-- if the user is soft deleted, but the viewer can see them, add a strikethrough --}}
<s><a href="{{ route('users.show', $user->id) }}">{{ $user->display_name }}</a></s>
@endif
@else
@if(! $user->trashed())
{{-- if the user is in database but soft-deleted --}}
<span>{{ $fullName }}</span>
{{-- if the user is in database and not soft-deleted --}}
<span>{{ $user->display_name }}</span>
@else
{{-- if the user exists --}}
<s><span>{{ $fullName }}</span></s>
{{-- if the user exists but is deleted and the viewer cannot click through to see their details --}}
<s><span>{{ $user->display_name }}</span></s>
@endif
@endcan
@endif
+1 -1
View File
@@ -86,7 +86,7 @@
<td>
@if ($request->requestingUser() && !$request->requestingUser()->trashed())
<a href="{{ config('app.url') }}/users/{{ $request->requestingUser()->id }}">
{{ $request->requestingUser()->present()->fullName() }}
{{ $request->requestingUser()->display_name }}
</a>
@else
(deleted user)
+2 -2
View File
@@ -338,7 +338,7 @@
@if (($asset->checkedOutToUser()) && ($asset->assignedTo->present()->gravatar()))
<li>
<img src="{{ $asset->assignedTo->present()->gravatar() }}" class="user-image-inline hidden-print" alt="{{ $asset->assignedTo->present()->fullName() }}">
<img src="{{ $asset->assignedTo->present()->gravatar() }}" class="user-image-inline hidden-print" alt="{{ $asset->assignedTo->display_name }}">
{!! $asset->assignedTo->present()->nameUrl() !!}
</li>
@else
@@ -547,7 +547,7 @@
{!! $asset->checkInvalidNextAuditDate() ? '<i class="fas fa-exclamation-triangle text-orange" aria-hidden="true"></i>' : '' !!}
{{ Helper::getFormattedDateObject($audit_log->created_at, 'datetime', false) }}
@if ($audit_log->user)
(by {{ link_to_route('users.show', $audit_log->user->present()->fullname(), [$audit_log->user->id]) }})
(by {{ link_to_route('users.show', $audit_log->user->display_name, [$audit_log->user->id]) }})
@endif
</div>
+1 -1
View File
@@ -353,7 +353,7 @@ dir="{{ Helper::determineLanguageDirection() }}">
@endif
<span class="hidden-xs">
{{ Auth::user()->getFullNameAttribute() }}
{{ Auth::user()->display_name }}
<strong class="caret"></strong>
</span>
</a>
+4 -4
View File
@@ -2,7 +2,7 @@
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>{{ trans('general.assigned_to', array('name' => $location->present()->fullName())) }} </title>
<title>{{ trans('general.assigned_to', array('name' => $location->display_name)) }} </title>
<style>
body {
font-family: "Arial, Helvetica", sans-serif;
@@ -49,9 +49,9 @@
@endif
@endif
<h2>{{ trans('general.assigned_to', array('name' => $location->present()->fullName())) }}</h2>
<h2>{{ trans('general.assigned_to', array('name' => $location->display_name)) }}</h2>
@if ($parent)
{{ $parent->present()->fullName() }}
{{ $parent->display_name }}
@endif
<br>
@if ($company)
@@ -59,7 +59,7 @@
<br>
@endif
@if ($manager)
<b>{{ trans('general.manager') }}</b> {{ $manager->present()->fullName() }}<br>
<b>{{ trans('general.manager') }}</b> {{ $manager->display_name }}<br>
@endif
<b>{{ trans('general.date') }}</b> {{ \App\Helpers\Helper::getFormattedDateObject(now(), 'datetime', false) }}<br><br>
@@ -1,5 +1,5 @@
@component('mail::message')
# {{ trans('mail.hello') }} {{ $target->present()->fullName() }},
# {{ trans('mail.hello') }} {{ $target->display_name }},
{{ trans('mail.the_following_item') }}
@@ -18,7 +18,7 @@
| **{{ trans('general.model_no') }}** | {{ $item->model_no }} |
@endif
@if ($admin)
| **{{ trans('general.administrator') }}** | {{ $admin->present()->fullName() }} |
| **{{ trans('general.administrator') }}** | {{ $admin->display_name }} |
@endif
@if ($note)
| **{{ trans('mail.additional_notes') }}** | {{ $note }} |
@@ -1,5 +1,5 @@
@component('mail::message')
# {{ trans('mail.hello') }} {{ $target->present()->fullName() }},
# {{ trans('mail.hello') }} {{ $target->display_name }},
{{ trans('mail.the_following_item') }}
@@ -43,7 +43,7 @@
@endif
@endforeach
@if ($admin)
| **{{ trans('general.administrator') }}** | {{ $admin->present()->fullName() }} |
| **{{ trans('general.administrator') }}** | {{ $admin->display_name }} |
@endif
@if ($note)
| **{{ trans('mail.additional_notes') }}** | {{ $note }} |
@@ -1,5 +1,5 @@
@component('mail::message')
# {{ trans('mail.hello') }} {{ $target->assignedto->present()->fullName() }},
# {{ trans('mail.hello') }} {{ $target->assignedto->display_name }},
{{ trans('mail.the_following_item') }}
@@ -11,7 +11,7 @@
| **{{ trans('general.manufacturer') }}** | {{ $item->manufacturer->name }} |
@endif
@if ($admin)
| **{{ trans('general.administrator') }}** | {{ $admin->present()->fullName() }} |
| **{{ trans('general.administrator') }}** | {{ $admin->display_name }} |
@endif
@if ($note)
| **{{ trans('mail.additional_notes') }}** | {{ $note }} |
@@ -1,5 +1,5 @@
@component('mail::message')
# {{ trans('mail.hello') }} {{ $target->present()->fullName() }},
# {{ trans('mail.hello') }} {{ $target->display_name }},
{{ trans('mail.the_following_item') }}
@@ -17,7 +17,7 @@
| **{{ trans('general.category') }}** | {{ $license->category->name }} |
@endif
@if ($admin)
| **{{ trans('general.administrator') }}** | {{ $admin->present()->fullName() }} |
| **{{ trans('general.administrator') }}** | {{ $admin->display_name }} |
@endif
@if ($note)
| **{{ trans('mail.additional_notes') }}** | {{ $note }} |
@@ -1,5 +1,5 @@
@component('mail::message')
# {{ trans('mail.hello') }} {{ $recipient->present()->fullName() }},
# {{ trans('mail.hello') }} {{ $recipient->display_name }},
{{ $introduction }}:
@@ -10,7 +10,7 @@
@component('mail::table')
| | |
| ------------- | ------------- |
| **{{ trans('mail.user') }}** | {{ $assignedTo->present()->fullName() }} |
| **{{ trans('mail.user') }}** | {{ $assignedTo->display_name }} |
| **{{ trans('mail.name') }}** | {{ $item->present()->name() }} |
@if (isset($item->asset_tag))
| **{{ trans('mail.asset_tag') }}** | {{ $item->asset_tag }} |
@@ -1,5 +1,5 @@
@component('mail::message')
# {{ trans('mail.hello') }}{{ $target->assignedto?->present()->fullName() ? ' ' . $target->assignedto->present()->fullName() . ',' : ',' }}
# {{ trans('mail.hello') }}{{ $target->assignedto?->display_name ? ' ' . $target->assignedto->display_name . ',' : ',' }}
{{ trans('mail.new_item_checked') }}
@@ -33,7 +33,7 @@
| **{{ trans('mail.additional_notes') }}** | {{ $note }} |
@endif
@if ($admin)
| **{{ trans('general.administrator') }}** | {{ $admin->present()->fullName() }} |
| **{{ trans('general.administrator') }}** | {{ $admin->display_name }} |
@endif
@endcomponent
@@ -46,7 +46,7 @@
@endif
@endforeach
@if ($admin)
| **{{ trans('general.administrator') }}** | {{ $admin->present()->fullName() }} |
| **{{ trans('general.administrator') }}** | {{ $admin->display_name }} |
@endif
@if ($note)
| **{{ trans('mail.additional_notes') }}** | {{ $note }} |
@@ -1,5 +1,5 @@
@component('mail::message')
# {{ trans('mail.hello') }} {{ $target->assignedto->present()->fullName() }},
# {{ trans('mail.hello') }} {{ $target->assignedto->display_name }},
{{ trans('mail.new_item_checked') }}
@@ -20,7 +20,7 @@
| **{{ trans('mail.additional_notes') }}** | {{ $note }} |
@endif
@if ($admin)
| **{{ trans('general.administrator') }}** | {{ $admin->present()->fullName() }} |
| **{{ trans('general.administrator') }}** | {{ $admin->display_name }} |
@endif
@endcomponent
@@ -1,5 +1,5 @@
@component('mail::message')
# {{ trans('mail.hello') }} {{ $target->present()->fullName() }},
# {{ trans('mail.hello') }} {{ $target->display_name }},
{{ trans('mail.new_item_checked') }}
@@ -27,7 +27,7 @@
| **{{ trans('mail.additional_notes') }}** | {{ $note }} |
@endif
@if ($admin)
| **{{ trans('general.administrator') }}** | {{ $admin->present()->fullName() }} |
| **{{ trans('general.administrator') }}** | {{ $admin->display_name }} |
@endif
@endcomponent
@@ -23,7 +23,7 @@
| **{{ trans('mail.additional_notes') }}** | {{ $note }} |
@endif
@if ($admin)
| **{{ trans('general.administrator') }}** | {{ $admin->present()->fullName() }} |
| **{{ trans('general.administrator') }}** | {{ $admin->display_name }} |
@endif
@endcomponent
+12
View File
@@ -79,6 +79,18 @@
</div>
</div>
<div class="dynamic-form-row">
<div class="form-group">
<div class="col-md-3 col-xs-12 ">
<label class="control-label" for="modal-display_name">{{ trans('admin/users/table.display_name') }}:</label>
</div>
<div class="col-md-8 col-xs-12">
<input class="form-control" type='text' name="display_name" id='modal-display_name' required>
</div>
</div>
</div>
<!-- Checkbox for activation new user, by default set for activated -->
<div class="dynamic-form-row">
<div class="form-group">
+1 -1
View File
@@ -249,7 +249,7 @@
@if ($model->adminuser)
<li>
<strong>{{ trans('general.created_by') }}</strong>:
{{ $model->adminuser->present()->name() }}
{{ $model->adminuser->display_name }}
</li>
@endif
@@ -13,7 +13,7 @@
@if (isset($qty))
| **{{ trans('general.qty') }}** | {{ $qty }}
@endif
| **{{ trans('mail.user') }}** | [{{ $requested_by->present()->fullName() }}]({{ route('users.show', $requested_by->id) }}) |
| **{{ trans('mail.user') }}** | [{{ $requested_by->display_name }}]({{ route('users.show', $requested_by->id) }}) |
| **{{ trans('general.requested') }}** | {{ $requested_date }} |
@if ((isset($item->asset_tag)) && ($item->asset_tag!=''))
| **{{ trans('mail.asset_tag') }}** | {{ $item->asset_tag }} |
File diff suppressed because it is too large Load Diff
@@ -76,7 +76,7 @@
<td>
<span {!! (Auth::user()->id==$user->id ? ' style="text-decoration: line-through"' : '') !!}>
{{ $user->present()->fullName() }} ({{ $user->username }})
{{ $user->display_name }} ({{ $user->username }})
</span>
{{ (Auth::id()==$user->id ? ' (cannot delete yourself)' : '') }}
</td>
@@ -76,7 +76,7 @@
@foreach ($users as $user)
<tr {!! ($user->isSuperUser() ? ' class="danger"':'') !!}>
<td>
<label class="form-control" for="{{ $user->id }}"><input type="radio" name="merge_into_id" id="{{ $user->id }}" value="{{ $user->id }}"> {{ $user->present()->fullName() }}</label>
<label class="form-control" for="{{ $user->id }}"><input type="radio" name="merge_into_id" id="{{ $user->id }}" value="{{ $user->id }}"> {{ $user->display_name }}</label>
</td>
<td>
{{ $user->email }}
+19 -1
View File
@@ -3,7 +3,7 @@
@section('title')
@if ($user->id)
{{ trans('admin/users/table.updateuser') }}
{{ $user->present()->fullName() }}
{{ $user->display_name }}
@else
{{ trans('admin/users/table.createuser') }}
@endif
@@ -311,6 +311,24 @@
<!-- everything here should be what is considered optional -->
<br>
<!-- Display Name -->
<div class="form-group {{ $errors->has('display_name') ? 'has-error' : '' }}">
<label class="col-md-3 control-label" for="display_name">{{ trans('admin/users/table.display_name') }}</label>
<div class="col-md-6">
<input
class="form-control"
type="text"
maxlength="191"
name="display_name"
id="display_name"
value="{{ old('display_name', $user->getRawOriginal('display_name')) }}"
/>
{!! $errors->first('display_name', '<span class="alert-msg" aria-hidden="true">:message</span>') !!}
</div>
</div>
<!-- Company -->
@if ((Gate::allows('canEditAuthFields', $user)) && (\App\Models\Company::canManageUsersCompanies()))
@include ('partials.forms.edit.company-select', ['translated_name' => trans('general.select_company'), 'fieldname' => 'company_id'])
+3 -3
View File
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
@if ((isset($users) && count($users) === 1))
<title>{{ trans('general.assigned_to', ['name' => $users[0]->present()->fullName()]) }} - {{ date('Y-m-d H:i', time()) }}</title>
<title>{{ trans('general.assigned_to', ['name' => $users[0]->display_name]) }} - {{ date('Y-m-d H:i', time()) }}</title>
@else
<title>{{ trans('admin/users/general.print_assigned') }} - {{ date('Y-m-d H:i', time()) }}</title>
@endisset
@@ -96,10 +96,10 @@
<div id="start_of_user_section"> {{-- used for page breaks when printing --}}</div>
<h3>
@if ($show_user->company)
<b>{{ trans('admin/companies/table.name') }}:</b> {{ $show_user->company->name }}</b>
<b>{{ trans('admin/companies/table.name') }}:</b> {{ $show_user->company->name }}
<br>
@endif
{{ trans('general.assigned_to', ['name' => $show_user->present()->fullName()]) }}
{{ trans('general.assigned_to', ['name' => $show_user->display_name]) }}
{{ ($show_user->employee_num!='') ? ' (#'.$show_user->employee_num.') ' : '' }}
{{ ($show_user->jobtitle!='' ? ' - '.$show_user->jobtitle : '') }}
</h3>
+40 -28
View File
@@ -2,7 +2,7 @@
{{-- Page title --}}
@section('title')
{{ trans('admin/users/general.view_user', ['name' => $user->present()->fullName()]) }}
{{ trans('admin/users/general.view_user', ['name' => $user->display_name]) }}
@parent
@stop
@@ -179,7 +179,7 @@
</div>
<div class="col-md-12 text-center">
<img src="{{ $user->present()->gravatar() }}" class=" img-thumbnail hidden-print" style="margin-bottom: 20px;" alt="{{ $user->present()->fullName() }}">
<img src="{{ $user->present()->gravatar() }}" class=" img-thumbnail hidden-print" style="margin-bottom: 20px;" alt="{{ $user->display_name }}">
</div>
@can('update', $user)
@@ -266,7 +266,7 @@
@if ($user->deleted_at=='')
<div class="col-md-12" style="padding-top: 30px;">
@if ($user->isDeletable())
<a href="" class="delete-asset btn-block btn btn-sm btn-danger btn-social hidden-print" data-toggle="modal" data-title="{{ trans('general.delete') }}" data-content="{{ trans('general.sure_to_delete_var', ['item' => $user->present()->fullName]) }}" data-icon="fa-trash" data-target="#dataConfirmModal" onClick="return false;" >
<a href="" class="delete-asset btn-block btn btn-sm btn-danger btn-social hidden-print" data-toggle="modal" data-title="{{ trans('general.delete') }}" data-content="{{ trans('general.sure_to_delete_var', ['item' => $user->display_name]) }}" data-icon="fa-trash" data-target="#dataConfirmModal" onClick="return false;" >
<x-icon type="delete" />
{{ trans('button.delete')}}
</a>
@@ -319,34 +319,13 @@
{{ trans('admin/users/table.name') }}
</div>
<div class="col-md-9">
{{ $user->present()->fullName() }}
{{ $user->first_name }} {{ $user->last_name }}
</div>
</div>
<!-- company -->
@if (!is_null($user->company))
<div class="row">
<div class="col-md-3">
{{ trans('general.company') }}
</div>
<div class="col-md-9">
@can('view', 'App\Models\Company')
<a href="{{ route('companies.show', $user->company->id) }}">
{{ $user->company->name }}
</a>
@else
{{ $user->company->name }}
@endcan
</div>
</div>
@endif
<!-- username -->
<div class="row">
@@ -366,6 +345,19 @@
</div>
<!-- display name -->
@if ($user->display_name)
<div class="row">
<div class="col-md-3">
{{ trans('admin/users/table.display_name') }}
</div>
<div class="col-md-9">
{{ $user->getRawOriginal('display_name') }}
</div>
</div>
@endif
<!-- address -->
@if (($user->address) || ($user->city) || ($user->state) || ($user->country))
<div class="row">
@@ -394,6 +386,26 @@
</div>
@endif
<!-- company -->
@if (!is_null($user->company))
<div class="row">
<div class="col-md-3">
{{ trans('general.company') }}
</div>
<div class="col-md-9">
@can('view', 'App\Models\Company')
<a href="{{ route('companies.show', $user->company->id) }}">
{{ $user->company->name }}
</a>
@else
{{ $user->company->name }}
@endcan
</div>
</div>
@endif
<!-- groups -->
<div class="row">
@@ -478,7 +490,7 @@
</div>
<div class="col-md-9">
<a href="{{ route('users.show', $user->manager->id) }}">
{{ $user->manager->getFullNameAttribute() }}
{{ $user->manager->display_name }}
</a>
</div>
@@ -601,7 +613,7 @@
@if ($user->createdBy)
-
@if ($user->createdBy->deleted_at=='')
<a href="{{ route('users.show', ['user' => $user->created_by]) }}">{{ $user->createdBy->present()->fullName }}</a>
<a href="{{ route('users.show', ['user' => $user->created_by]) }}">{{ $user->createdBy->display_name }}</a>
@else
<del>{{ $user->createdBy->present()->fullName }}</del>
@endif
@@ -826,7 +838,7 @@
class="table table-striped snipe-table"
data-url="{{ route('api.assets.index',['assigned_to' => e($user->id), 'assigned_type' => 'App\Models\User']) }}"
data-export-options='{
"fileName": "export-{{ str_slug($user->present()->fullName()) }}-assets-{{ date('Y-m-d') }}",
"fileName": "export-{{ str_slug($user->username) }}-assets-{{ date('Y-m-d') }}",
"ignoreColumn": ["actions","image","change","checkbox","checkincheckout","icon"]
}'>
</table>
+101 -101
View File
@@ -1,101 +1,101 @@
First Name,Last Name,Email,Username,Activated,Location,Address,City,State,Country,Postal Code,Website,Phone,Job Title,Notes,Employee Number,Company,Manager,Remote,VIP,Start Date,End Date,Gravatar
Reagen,Tenant,rtenant0@istockphoto.com,rtenant0,true,"Braun, Ullrich and O'Hara",0406 Emmet Drive,,,,,https://netvibes.com,895-137-2034,Nurse Practicioner,ac tellus semper interdum mauris ullamcorper purus sit amet nulla quisque arcu libero rutrum,"",,Reagen Tenant,true,true,2022-03-18,2022-12-04,rtenant0@soup.io
Kenneth,Lefeuvre,klefeuvre1@woothemes.com,klefeuvre1,false,Mueller LLC,404 Dennis Alley,,,,,,,Senior Quality Engineer,lacus at turpis donec posuere metus vitae ipsum,"",,,true,,,,
Kiel,Eland,keland2@tinyurl.com,keland2,false,"Mayer, Jacobi and Gibson",3058 Declaration Park,,,,,,,Web Developer I,eu est congue elementum in hac habitasse platea dictumst morbi vestibulum velit id,"",,,true,,,,
Susana,Kinneally,skinneally3@purevolume.com,skinneally3,false,Block Inc,1 Chive Alley,,,,,,,Software Consultant,phasellus in felis donec semper sapien a libero nam dui proin leo odio porttitor id consequat,"",,,true,,,,
Wallis,Hadcock,whadcock4@abc.net.au,whadcock4,false,Roob-Bartoletti,496 Hazelcrest Terrace,,,,,,,Information Systems Manager,nam congue risus semper porta volutpat quam pede lobortis ligula sit amet eleifend,"","Hand, Rohan and Oberbrunner",,false,,,,
Audry,Piell,apiell5@china.com.cn,apiell5,false,Schoen-Hilpert,3136 Talmadge Circle,,,,,,,Chemical Engineer,congue risus semper porta volutpat quam pede lobortis ligula sit amet eleifend pede libero quis orci nullam,"",,,false,,,,
Veronike,Poytress,vpoytress6@scribd.com,vpoytress6,false,"D'Amore, Schoen and Rogahn",3 Northwestern Hill,,,,,http://acquirethisname.com,198-980-1723,Compensation Analyst,non mattis pulvinar nulla pede ullamcorper augue a suscipit nulla elit ac nulla sed vel enim sit amet,"",,Veronike Poytress,true,true,2022-05-10,2022-08-14,vpoytress6@ed.gov
Sibel,Serris,sserris7@mayoclinic.com,sserris7,true,Swaniawski and Sons,090 Summit Road,,,,,,,,,,,,false,,,,
Aldis,Smardon,asmardon8@ifeng.com,asmardon8,false,Huels-Reinger,2 Brown Trail,,,,,,,,,,,,true,,,,
Juan,,,jlowseley9,true,Nicolas and Sons,0 Village Pass,,,,,,,Cost Accountant,phasellus id sapien in sapien,"",,,true,,,,
Thaine,Coger,tcogera@naver.com,tcogera,false,Zieme-Davis,31 Little Fleur Park,,,,,,,,,,,,true,,,,
Adrien,Ciotti,aciottib@ucoz.ru,aciottib,true,"Ward, Wolff and King",61 Graedel Hill,,,,,,,,,,,,false,,,,
Harmony,Vanetti,hvanettic@wordpress.com,hvanettic,true,"Kulas, Heller and Cormier",35 Hintze Drive,,,,,,,,,,Wyman-Jenkins,,true,,,,
Pansie,Morston,pmorstond@ebay.com,pmorstond,false,Mosciski-Graham,73222 Walton Street,,,,,,,,,,,,false,,,,
Court,Halse,chalsee@walmart.com,chalsee,true,"O'Reilly, Hilll and Stokes",61514 Pepper Wood Trail,,,,,,,,,,,,false,,,,
Gerardo,Scrowby,gscrowbyf@multiply.com,gscrowbyf,false,Cruickshank-Kling,18314 Schlimgen Point,,,,,,,,,,,,false,,,,
Imojean,Veare,iveareg@chronoengine.com,iveareg,false,Schultz-Lakin,9 Blaine Street,,,,,https://soup.io,502-710-6094,Environmental Tech,consequat lectus in est risus auctor sed,"",,Imojean Veare,false,true,2022-01-24,2022-08-06,iveareg@answers.com
Samuel,Bickley,sbickleyh@gravatar.com,sbickleyh,true,Langworth-Friesen,5891 Bunker Hill Crossing,,,,,,,,,,Corkery and Sons,,false,,,,
Niall,Ethington,nethingtoni@google.fr,nethingtoni,true,"Ledner, Klocko and Sipes",511 Springs Parkway,,,,,,,,,,,,false,,,,
Elfreda,Ilyukhov,eilyukhovj@mashable.com,eilyukhovj,false,Spinka-Ortiz,475 Bluestem Point,,,,,,,Clinical Specialist,felis ut at dolor quis odio consequat varius integer ac,"",,,true,,,,
Serena,Josling,sjoslingk@oracle.com,sjoslingk,false,Wuckert-Schuster,10512 Fuller Avenue,,,,,,,,,,"Cruickshank, Ziemann and Kreiger",,false,,,,
Sheelah,Dockwray,sdockwrayl@narod.ru,sdockwrayl,true,Orn-Koss,4241 Scofield Circle,,,,,,,Nurse,vestibulum sed magna at nunc commodo placerat praesent blandit nam nulla integer pede,"",Hermann-Anderson,,true,,,,
Lanette,Remnant,lremnantm@vinaora.com,lremnantm,false,Abshire LLC,8 Buena Vista Junction,,,,,,,General Manager,mauris ullamcorper purus sit amet,"",Bahringer-Lockman,,false,,,,
Jordan,Pritty,jprittyn@reverbnation.com,jprittyn,false,Stroman LLC,36 Becker Plaza,,,,,,,,,,Durgan-Bosco,,true,,,,
Lorrin,Boni,lbonio@msn.com,lbonio,true,Bogisich-Nolan,7 Messerschmidt Point,,,,,,,,,,,,false,,,,
Marie-ann,Waind,mwaindp@ucoz.ru,mwaindp,true,"Hartmann, Weissnat and Cassin",68082 Schmedeman Court,,,,,,,Nurse,duis faucibus accumsan odio curabitur convallis duis consequat,"",,,true,,,,
Marti,Daens,mdaensq@huffingtonpost.com,mdaensq,false,Robel-Roob,7 Knutson Pass,,,,,http://gov.uk,381-382-8857,Electrical Engineer,sapien a libero nam dui proin leo,"",,Marti Daens,false,true,2021-12-19,2022-12-08,mdaensq@themeforest.net
Scotti,Gillison,sgillisonr@intel.com,sgillisonr,true,Howe-Collins,44 Elka Terrace,,,,,,,Financial Advisor,viverra eget congue eget semper rutrum nulla nunc purus,"",,,true,,,,
Bobbe,Alven,balvens@csmonitor.com,balvens,true,Weimann-Bernhard,71 Manley Park,,,,,,,,,,Champlin-Turcotte,,false,,,,
Ferdy,Kincade,fkincadet@wsj.com,fkincadet,true,Bode Inc,3023 Novick Alley,,,,,,,Statistician IV,amet nulla quisque arcu libero,"",,,true,,,,
Rachael,Briers,rbriersu@vimeo.com,rbriersu,false,Koch and Sons,71 Shoshone Court,,,,,,,,,,,,true,,,,
Ado,Bartholin,abartholinv@ft.com,abartholinv,false,"Buckridge, Klein and Johnston",11 Jenna Avenue,,,,,,,,,,,,false,,,,
Tessy,,,tsailerw,false,Parker-Beer,0964 Vidon Way,,,,,,,Structural Engineer,aliquet ultrices erat tortor sollicitudin,"",,,true,,,,
Chloe,Gebbie,cgebbiex@cam.ac.uk,cgebbiex,false,Smith Inc,8 5th Alley,,,,,,,,,,,,true,,,,
Emlyn,Cusick,ecusicky@homestead.com,ecusicky,true,Dickens LLC,43 Canary Point,,,,,,,Health Coach II,eu tincidunt in leo maecenas pulvinar lobortis est phasellus sit amet erat nulla tempus vivamus in,"",,,true,,,,
Kenneth,McGuire,kmcguirez@scribd.com,kmcguirez,true,"Torphy, Bednar and Davis",2 Stone Corner Park,,,,,,,Nurse Practicioner,tortor duis mattis egestas metus aenean fermentum donec ut mauris eget massa,"",,,false,,,,
Berri,Forson,bforson10@pcworld.com,bforson10,true,"D'Amore, Larkin and O'Keefe",266 Alpine Road,,,,,,,Tax Accountant,in purus eu magna vulputate luctus cum sociis natoque penatibus et,"",,,true,,,,
Bree,Jiru,bjiru11@gravatar.com,bjiru11,true,Altenwerth LLC,58 4th Alley,,,,,,,,,,Farrell and Sons,,true,,,,
Kathie,Dignan,kdignan12@bbb.org,kdignan12,true,"Pagac, Effertz and Padberg",973 Banding Point,,,,,,,,,,"Marquardt, Cummings and Bosco",,true,,,,
Filbert,Van Der Straaten,fvanderstraaten13@sourceforge.net,fvanderstraaten13,false,"Cronin, Mante and Klein",0 Stuart Junction,,,,,,,Research Assistant I,ut massa volutpat convallis morbi odio odio elementum eu interdum eu tincidunt in leo maecenas,"",Bauch-Kling,,true,,,,
Miguel,Farbrace,mfarbrace14@barnesandnoble.com,mfarbrace14,false,O'Keefe Inc,1 Mallory Avenue,,,,,,,Assistant Manager,a libero nam dui proin leo odio porttitor id consequat in consequat ut nulla sed accumsan felis,"",Schmeler-Krajcik,,false,,,,
Em,,,ekittley15,false,Schuppe-Barrows,9946 Canary Pass,,,,,,,Nuclear Power Engineer,odio curabitur convallis duis consequat dui nec nisi,"","Abshire, Goyette and Spinka",,true,,,,
Bill,Morales,bmorales16@addtoany.com,bmorales16,true,Leannon Inc,0 Hudson Circle,,,,,,,,,,,,true,,,,
Spenser,Branca,sbranca17@tripod.com,sbranca17,false,Halvorson Inc,7904 Green Road,,,,,,,,,,,,false,,,,
Dawna,Ainslee,dainslee18@nifty.com,dainslee18,true,"Strosin, Collier and O'Connell",17 Granby Center,,,,,,,,,,,,false,,,,
Lind,Fontanet,lfontanet19@lycos.com,lfontanet19,false,Bins-Kunde,84 Kenwood Junction,,,,,,,,,,"Romaguera, Adams and Schoen",,false,,,,
Ashli,Gheorghie,agheorghie1a@blogtalkradio.com,agheorghie1a,false,Hauck Inc,8 Warrior Drive,,,,,,,,,,Wisozk Inc,,false,,,,
Janice,Freddi,jfreddi1b@behance.net,jfreddi1b,true,"Stoltenberg, Aufderhar and Schaden",0 Esch Alley,,,,,,,,,,,,false,,,,
Reinwald,Ivakhin,rivakhin1c@ask.com,rivakhin1c,false,Jacobson-Mosciski,24 New Castle Alley,,,,,,,,,,Welch and Sons,,true,,,,
Lindsey,Trevance,ltrevance1d@prnewswire.com,ltrevance1d,true,Hansen-Luettgen,17443 Lindbergh Plaza,,,,,,,Web Designer II,interdum eu tincidunt in leo maecenas pulvinar lobortis est phasellus,"",,,false,,,,
Cordi,Frostdyke,cfrostdyke1e@weather.com,cfrostdyke1e,false,Kohler Inc,53066 Merchant Plaza,,,,,,,,,,,,false,,,,
Jayme,Piatto,jpiatto1f@slate.com,jpiatto1f,true,Johnson and Sons,5598 Fuller Avenue,,,,,,,Graphic Designer,accumsan felis ut at dolor quis odio consequat varius integer,"",,,true,,,,
Henriette,Glanvill,hglanvill1g@ifeng.com,hglanvill1g,true,"Mills, Kautzer and Stiedemann",6461 Stang Center,,,,,,,,,,Gibson and Sons,,true,,,,
Izak,Legen,ilegen1h@berkeley.edu,ilegen1h,true,"Schiller, Runolfsson and Gottlieb",86874 Hovde Avenue,,,,,,,,,,,,false,,,,
Silas,Vallentin,svallentin1i@zdnet.com,svallentin1i,false,Wolff Inc,15041 Graceland Park,,,,,,,,,,,,true,,,,
Ansel,Augustus,aaugustus1j@oaic.gov.au,aaugustus1j,true,"Rippin, Frami and Parker",843 Nova Alley,,,,,,,Assistant Media Planner,ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae donec,"",Morissette and Sons,,false,,,,
Annemarie,Reburn,areburn1k@networksolutions.com,areburn1k,true,Dach Group,05 Crowley Avenue,,,,,,,Administrative Assistant IV,vivamus tortor duis mattis egestas metus aenean fermentum donec,"","Murazik, Wyman and Yost",,false,,,,
Fee,Bissell,fbissell1l@comsenz.com,fbissell1l,true,Braun Group,678 Nelson Hill,,,,,,,Health Coach IV,sed augue aliquam erat volutpat in congue etiam justo etiam pretium iaculis justo in,"","Lindgren, Quitzon and Heathcote",,true,,,,
Zenia,Kordt,zkordt1m@com.com,zkordt1m,true,"Harvey, Fay and Yundt",6337 Mayer Trail,,,,,,,Associate Professor,congue etiam justo etiam pretium iaculis justo in hac habitasse platea dictumst etiam faucibus cursus urna,"",,,true,,,,
Winthrop,Eales,weales1n@stanford.edu,weales1n,true,Johns-Kshlerin,79780 Helena Lane,,,,,,,Accountant I,platea dictumst etiam faucibus cursus urna ut,"",,,false,,,,
Davis,,,dnatalie1o,false,Tillman-Marquardt,3893 Express Junction,,,,,https://answers.com,266-409-9118,Teacher,suspendisse accumsan tortor quis turpis sed ante vivamus tortor,"",Casper-Grimes,Davis Natalie,false,false,2022-04-08,2022-09-24,dnatalie1o@altervista.org
Massimiliano,Fardo,mfardo1p@imgur.com,mfardo1p,true,Kozey Group,72 Hauk Terrace,,,,,,,Account Coordinator,parturient montes nascetur ridiculus mus etiam vel augue vestibulum rutrum rutrum neque aenean auctor gravida sem praesent id,"",Bednar Inc,,false,,,,
Dacey,Larrie,dlarrie1q@digg.com,dlarrie1q,false,Jerde-Ullrich,70371 Del Mar Center,,,,,,,,,,,,true,,,,
Pattie,Melvin,pmelvin1r@discovery.com,pmelvin1r,false,"McDermott, Mayert and Kemmer",845 Anderson Point,,,,,,,Safety Technician II,sit amet erat nulla tempus vivamus in felis eu sapien cursus vestibulum proin,"",,,true,,,,
Franny,Laughlin,flaughlin1s@blogspot.com,flaughlin1s,false,Renner-Terry,94 Northfield Pass,,,,,,,,,,"Parisian, Hudson and Bahringer",,false,,,,
Mariel,Roelvink,mroelvink1t@timesonline.co.uk,mroelvink1t,true,Russel-Blanda,434 Crest Line Road,,,,,http://amazon.de,429-401-0847,Quality Engineer,vel pede morbi porttitor lorem id ligula suspendisse ornare consequat lectus in est risus auctor sed tristique in tempus,"",,Mariel Roelvink,true,false,2022-02-21,2022-09-01,mroelvink1t@feedburner.com
Josee,Ghirardi,jghirardi1u@arizona.edu,jghirardi1u,true,Koss-Schmitt,96 Kingsford Avenue,,,,,,,,,,,,true,,,,
Felix,Pheasant,fpheasant1v@soundcloud.com,fpheasant1v,true,Rogahn Group,43 Northridge Place,,,,,,,,,,Hoppe-O'Reilly,,false,,,,
Stearne,Gwatkins,sgwatkins1w@jugem.jp,sgwatkins1w,false,"Koch, Ferry and Marks",6 Victoria Circle,,,,,,,,,,,,false,,,,
Nathaniel,Parkinson,nparkinson1x@springer.com,nparkinson1x,true,Harber Group,4589 Clarendon Way,,,,,,,Software Consultant,non mattis pulvinar nulla pede ullamcorper augue a suscipit nulla elit ac nulla sed vel enim sit amet nunc viverra,"",Koepp LLC,,true,,,,
Blondelle,Crawley,bcrawley1y@ezinearticles.com,bcrawley1y,true,"Hirthe, Bashirian and Feeney",17149 Ridge Oak Park,,,,,,,Help Desk Technician,sit amet cursus id turpis integer aliquet massa id lobortis convallis tortor risus dapibus augue vel accumsan tellus nisi eu,"",,,true,,,,
Pammi,Yair,pyair1z@virginia.edu,pyair1z,true,"Pfeffer, Schmeler and Dibbert",541 Beilfuss Alley,,,,,,,,,,,,true,,,,
Tremain,Lattimer,tlattimer20@go.com,tlattimer20,true,"Kuvalis, Kris and Howell",19 Red Cloud Parkway,,,,,,,,,,Gutkowski LLC,,true,,,,
Moreen,Fermin,mfermin21@w3.org,mfermin21,false,"Romaguera, Spinka and Bayer",50 Eagle Crest Circle,,,,,,,,,,,,true,,,,
Jena,Taborre,jtaborre22@pinterest.com,jtaborre22,true,Raynor Group,97 Helena Center,,,,,,,Dental Hygienist,vel enim sit amet nunc viverra dapibus nulla suscipit ligula in lacus curabitur at ipsum ac tellus semper interdum mauris,"",,,false,,,,
Odille,Stede,ostede23@biglobe.ne.jp,ostede23,true,"Boyle, Schowalter and Mayer",88993 Sunbrook Street,,,,,http://live.com,464-815-6024,,,,,Odille Stede,true,false,2021-12-12,2022-06-27,ostede23@lycos.com
Kori,Fulk,kfulk24@tiny.cc,kfulk24,true,Konopelski and Sons,43 Mockingbird Avenue,,,,,,,,,,"Nikolaus, Cassin and Streich",,true,,,,
Pollyanna,Cardon,pcardon25@infoseek.co.jp,pcardon25,false,Hickle Group,52088 Almo Junction,,,,,,,,,,"Cronin, Cummerata and Tromp",,false,,,,
Austin,McGeneay,amcgeneay26@tmall.com,amcgeneay26,true,Yundt-Howell,021 4th Park,,,,,,,Social Worker,est phasellus sit amet erat nulla tempus vivamus in felis eu sapien cursus vestibulum proin eu mi nulla,"",,,true,,,,
Imogen,Hamill,ihamill27@w3.org,ihamill27,false,Herman-Schulist,802 Sunbrook Place,,,,,http://vistaprint.com,344-665-1217,Registered Nurse,curabitur convallis duis consequat dui nec nisi volutpat,"",,Imogen Hamill,false,false,2021-12-03,2023-04-16,ihamill27@over-blog.com
Hershel,Bielfeld,hbielfeld28@soup.io,hbielfeld28,true,Kreiger and Sons,6944 Buell Trail,,,,,,,Actuary,curae donec pharetra magna vestibulum aliquet ultrices erat,"",Schmitt-Abbott,,true,,,,
Korry,,,ksteckings29,true,Bogan Inc,800 Ilene Parkway,,,,,,,,,,,,true,,,,
Cookie,Warret,cwarret2a@sakura.ne.jp,cwarret2a,false,Murphy-Yost,9 Vera Terrace,,,,,,,Mechanical Systems Engineer,semper rutrum nulla nunc purus phasellus in felis donec semper sapien a libero nam dui proin leo odio,"","Lueilwitz, Beahan and Raynor",,false,,,,
Wynne,Gonnely,wgonnely2b@facebook.com,wgonnely2b,true,"Frami, Erdman and Mayert",051 Kenwood Junction,,,,,,,,,,,,true,,,,
Ethelred,Bogey,ebogey2c@infoseek.co.jp,ebogey2c,true,Christiansen and Sons,7414 2nd Pass,,,,,,,Media Manager II,donec odio justo sollicitudin ut suscipit a feugiat et eros vestibulum ac est lacinia,"",,,false,,,,
Alvera,Tunuy,atunuy2d@bizjournals.com,atunuy2d,false,"Vandervort, Veum and Walker",152 Division Park,,,,,,,,,,"Bartell, Hartmann and Jerde",,false,,,,
Martino,Rosenbusch,mrosenbusch2e@seesaa.net,mrosenbusch2e,true,Parisian-Romaguera,130 Westridge Alley,,,,,http://bravesites.com,626-888-4072,,,,"Keebler, Walter and Senger",Martino Rosenbusch,false,false,2022-01-20,2022-09-11,mrosenbusch2e@about.me
Susi,Trapp,strapp2f@ft.com,strapp2f,false,"Rogahn, Volkman and McDermott",72958 Vahlen Avenue,,,,,,,,,,Nitzsche-Langosh,,true,,,,
Gordon,Alflatt,galflatt2g@marriott.com,galflatt2g,false,Effertz-Howell,0681 International Plaza,,,,,,,Research Associate,duis aliquam convallis nunc proin,"","Farrell, Hoeger and O'Keefe",,true,,,,
Derrick,Braidon,dbraidon2h@blogs.com,dbraidon2h,false,Prosacco-Walker,8760 Del Sol Circle,,,,,,,,,,Koss-Bogisich,,true,,,,
Minnnie,Bonar,mbonar2i@biglobe.ne.jp,mbonar2i,true,Daniel LLC,5424 Karstens Alley,,,,,,,Web Designer III,faucibus orci luctus et ultrices posuere cubilia curae mauris,"",,,true,,,,
Casper,Sinnatt,csinnatt2j@hc360.com,csinnatt2j,true,Barrows-Mertz,79 Melvin Center,,,,,,,,,,,,false,,,,
Chloe,Fist,cfist2k@auda.org.au,cfist2k,false,"Kling, Streich and Kertzmann",47064 Glacier Hill Court,,,,,,,,,,Altenwerth-Leuschke,,true,,,,
Elysha,Gosenell,egosenell2l@ft.com,egosenell2l,true,Hirthe LLC,70 Old Gate Alley,,,,,,,Nuclear Power Engineer,amet cursus id turpis integer aliquet massa id lobortis convallis tortor risus dapibus augue vel accumsan tellus,"",Macejkovic and Sons,,false,,,,
Gerianna,Feirn,gfeirn2m@bing.com,gfeirn2m,true,"Collier, Kirlin and Armstrong",881 Summer Ridge Circle,,,,,,,,,,,,false,,,,
Lucas,Mulvany,lmulvany2n@deliciousdays.com,lmulvany2n,false,Bahringer Group,639 La Follette Circle,,,,,,,,,,,,true,,,,
Lenore,Menendez,lmenendez2o@cdbaby.com,lmenendez2o,true,"Nader, Harvey and Casper",02 Springs Avenue,,,,,https://a8.net,926-526-1742,Community Outreach Specialist,ut odio cras mi pede malesuada in imperdiet et commodo vulputate justo in blandit ultrices enim lorem ipsum dolor,"",,Lenore Menendez,true,false,2022-01-11,2022-07-29,lmenendez2o@ifeng.com
Collete,Brandes,cbrandes2p@accuweather.com,cbrandes2p,true,Koepp-Parisian,5 Haas Way,,,,,,,,,,,,false,,,,
Osborne,Gummory,ogummory2q@1und1.de,ogummory2q,false,Mertz and Sons,91749 Haas Alley,,,,,,,,,,,,true,,,,
Emiline,Grossman,egrossman2r@dmoz.org,egrossman2r,true,Parisian and Sons,3872 Eagle Crest Court,,,,,https://uiuc.edu,338-830-8647,Food Chemist,dolor vel est donec odio justo sollicitudin ut suscipit a feugiat et eros vestibulum ac est lacinia nisi venenatis,"",Williamson-Casper,Emiline Grossman,true,true,2021-11-10,2022-10-01,egrossman2r@spiegel.de
First Name,Last Name,Email,Username,Display Name,Activated,Location,Address,City,State,Country,Postal Code,Website,Phone,Job Title,Notes,Employee Number,Company,Manager,Remote,VIP,Start Date,End Date,Gravatar
Reagen,Tenant,rtenant0@istockphoto.com,rtenant0,Heywood,TRUE,"Braun, Ullrich and O'Hara",0406 Emmet Drive,,,,,https://netvibes.com,895-137-2034,Nurse Practicioner,ac tellus semper interdum mauris ullamcorper purus sit amet nulla quisque arcu libero rutrum,,,Reagen Tenant,TRUE,TRUE,2022-03-18,2022-12-04,rtenant0@soup.io
Kenneth,Lefeuvre,klefeuvre1@woothemes.com,klefeuvre1,,FALSE,Mueller LLC,404 Dennis Alley,,,,,,,Senior Quality Engineer,lacus at turpis donec posuere metus vitae ipsum,,,,TRUE,,,,
Kiel,Eland,keland2@tinyurl.com,keland2,,FALSE,"Mayer, Jacobi and Gibson",3058 Declaration Park,,,,,,,Web Developer I,eu est congue elementum in hac habitasse platea dictumst morbi vestibulum velit id,,,,TRUE,,,,
Susana,Kinneally,skinneally3@purevolume.com,skinneally3,George,FALSE,Block Inc,1 Chive Alley,,,,,,,Software Consultant,phasellus in felis donec semper sapien a libero nam dui proin leo odio porttitor id consequat,,,,TRUE,,,,
Wallis,Hadcock,whadcock4@abc.net.au,whadcock4,,FALSE,Roob-Bartoletti,496 Hazelcrest Terrace,,,,,,,Information Systems Manager,nam congue risus semper porta volutpat quam pede lobortis ligula sit amet eleifend,,"Hand, Rohan and Oberbrunner",,FALSE,,,,
Audry,Piell,apiell5@china.com.cn,apiell5,,FALSE,Schoen-Hilpert,3136 Talmadge Circle,,,,,,,Chemical Engineer,congue risus semper porta volutpat quam pede lobortis ligula sit amet eleifend pede libero quis orci nullam,,,,FALSE,,,,
Veronike,Poytress,vpoytress6@scribd.com,vpoytress6,Paul,FALSE,"D'Amore, Schoen and Rogahn",3 Northwestern Hill,,,,,http://acquirethisname.com,198-980-1723,Compensation Analyst,non mattis pulvinar nulla pede ullamcorper augue a suscipit nulla elit ac nulla sed vel enim sit amet,,,Veronike Poytress,TRUE,TRUE,2022-05-10,2022-08-14,vpoytress6@ed.gov
Sibel,Serris,sserris7@mayoclinic.com,sserris7,,TRUE,Swaniawski and Sons,090 Summit Road,,,,,,,,,,,,FALSE,,,,
Aldis,Smardon,asmardon8@ifeng.com,asmardon8,,FALSE,Huels-Reinger,2 Brown Trail,,,,,,,,,,,,TRUE,,,,
Juan,,,jlowseley9,Awesomesauce,TRUE,Nicolas and Sons,0 Village Pass,,,,,,,Cost Accountant,phasellus id sapien in sapien,,,,TRUE,,,,
Thaine,Coger,tcogera@naver.com,tcogera,,FALSE,Zieme-Davis,31 Little Fleur Park,,,,,,,,,,,,TRUE,,,,
Adrien,Ciotti,aciottib@ucoz.ru,aciottib,,TRUE,"Ward, Wolff and King",61 Graedel Hill,,,,,,,,,,,,FALSE,,,,
Harmony,Vanetti,hvanettic@wordpress.com,hvanettic,,TRUE,"Kulas, Heller and Cormier",35 Hintze Drive,,,,,,,,,,Wyman-Jenkins,,TRUE,,,,
Pansie,Morston,pmorstond@ebay.com,pmorstond,,FALSE,Mosciski-Graham,73222 Walton Street,,,,,,,,,,,,FALSE,,,,
Court,Halse,chalsee@walmart.com,chalsee,Test,TRUE,"O'Reilly, Hilll and Stokes",61514 Pepper Wood Trail,,,,,,,,,,,,FALSE,,,,
Gerardo,Scrowby,gscrowbyf@multiply.com,gscrowbyf,,FALSE,Cruickshank-Kling,18314 Schlimgen Point,,,,,,,,,,,,FALSE,,,,
Imojean,Veare,iveareg@chronoengine.com,iveareg,Testtest,FALSE,Schultz-Lakin,9 Blaine Street,,,,,https://soup.io,502-710-6094,Environmental Tech,consequat lectus in est risus auctor sed,,,Imojean Veare,FALSE,TRUE,2022-01-24,2022-08-06,iveareg@answers.com
Samuel,Bickley,sbickleyh@gravatar.com,sbickleyh,,TRUE,Langworth-Friesen,5891 Bunker Hill Crossing,,,,,,,,,,Corkery and Sons,,FALSE,,,,
Niall,Ethington,nethingtoni@google.fr,nethingtoni,,TRUE,"Ledner, Klocko and Sipes",511 Springs Parkway,,,,,,,,,,,,FALSE,,,,
Elfreda,Ilyukhov,eilyukhovj@mashable.com,eilyukhovj,,FALSE,Spinka-Ortiz,475 Bluestem Point,,,,,,,Clinical Specialist,felis ut at dolor quis odio consequat varius integer ac,,,,TRUE,,,,
Serena,Josling,sjoslingk@oracle.com,sjoslingk,,FALSE,Wuckert-Schuster,10512 Fuller Avenue,,,,,,,,,,"Cruickshank, Ziemann and Kreiger",,FALSE,,,,
Sheelah,Dockwray,sdockwrayl@narod.ru,sdockwrayl,,TRUE,Orn-Koss,4241 Scofield Circle,,,,,,,Nurse,vestibulum sed magna at nunc commodo placerat praesent blandit nam nulla integer pede,,Hermann-Anderson,,TRUE,,,,
Lanette,Remnant,lremnantm@vinaora.com,lremnantm,,FALSE,Abshire LLC,8 Buena Vista Junction,,,,,,,General Manager,mauris ullamcorper purus sit amet,,Bahringer-Lockman,,FALSE,,,,
Jordan,Pritty,jprittyn@reverbnation.com,jprittyn,,FALSE,Stroman LLC,36 Becker Plaza,,,,,,,,,,Durgan-Bosco,,TRUE,,,,
Lorrin,Boni,lbonio@msn.com,lbonio,,TRUE,Bogisich-Nolan,7 Messerschmidt Point,,,,,,,,,,,,FALSE,,,,
Marie-ann,Waind,mwaindp@ucoz.ru,mwaindp,,TRUE,"Hartmann, Weissnat and Cassin",68082 Schmedeman Court,,,,,,,Nurse,duis faucibus accumsan odio curabitur convallis duis consequat,,,,TRUE,,,,
Marti,Daens,mdaensq@huffingtonpost.com,mdaensq,,FALSE,Robel-Roob,7 Knutson Pass,,,,,http://gov.uk,381-382-8857,Electrical Engineer,sapien a libero nam dui proin leo,,,Marti Daens,FALSE,TRUE,2021-12-19,2022-12-08,mdaensq@themeforest.net
Scotti,Gillison,sgillisonr@intel.com,sgillisonr,,TRUE,Howe-Collins,44 Elka Terrace,,,,,,,Financial Advisor,viverra eget congue eget semper rutrum nulla nunc purus,,,,TRUE,,,,
Bobbe,Alven,balvens@csmonitor.com,balvens,,TRUE,Weimann-Bernhard,71 Manley Park,,,,,,,,,,Champlin-Turcotte,,FALSE,,,,
Ferdy,Kincade,fkincadet@wsj.com,fkincadet,,TRUE,Bode Inc,3023 Novick Alley,,,,,,,Statistician IV,amet nulla quisque arcu libero,,,,TRUE,,,,
Rachael,Briers,rbriersu@vimeo.com,rbriersu,,FALSE,Koch and Sons,71 Shoshone Court,,,,,,,,,,,,TRUE,,,,
Ado,Bartholin,abartholinv@ft.com,abartholinv,,FALSE,"Buckridge, Klein and Johnston",11 Jenna Avenue,,,,,,,,,,,,FALSE,,,,
Tessy,,,tsailerw,,FALSE,Parker-Beer,0964 Vidon Way,,,,,,,Structural Engineer,aliquet ultrices erat tortor sollicitudin,,,,TRUE,,,,
Chloe,Gebbie,cgebbiex@cam.ac.uk,cgebbiex,,FALSE,Smith Inc,8 5th Alley,,,,,,,,,,,,TRUE,,,,
Emlyn,Cusick,ecusicky@homestead.com,ecusicky,,TRUE,Dickens LLC,43 Canary Point,,,,,,,Health Coach II,eu tincidunt in leo maecenas pulvinar lobortis est phasellus sit amet erat nulla tempus vivamus in,,,,TRUE,,,,
Kenneth,McGuire,kmcguirez@scribd.com,kmcguirez,,TRUE,"Torphy, Bednar and Davis",2 Stone Corner Park,,,,,,,Nurse Practicioner,tortor duis mattis egestas metus aenean fermentum donec ut mauris eget massa,,,,FALSE,,,,
Berri,Forson,bforson10@pcworld.com,bforson10,,TRUE,"D'Amore, Larkin and O'Keefe",266 Alpine Road,,,,,,,Tax Accountant,in purus eu magna vulputate luctus cum sociis natoque penatibus et,,,,TRUE,,,,
Bree,Jiru,bjiru11@gravatar.com,bjiru11,,TRUE,Altenwerth LLC,58 4th Alley,,,,,,,,,,Farrell and Sons,,TRUE,,,,
Kathie,Dignan,kdignan12@bbb.org,kdignan12,,TRUE,"Pagac, Effertz and Padberg",973 Banding Point,,,,,,,,,,"Marquardt, Cummings and Bosco",,TRUE,,,,
Filbert,Van Der Straaten,fvanderstraaten13@sourceforge.net,fvanderstraaten13,,FALSE,"Cronin, Mante and Klein",0 Stuart Junction,,,,,,,Research Assistant I,ut massa volutpat convallis morbi odio odio elementum eu interdum eu tincidunt in leo maecenas,,Bauch-Kling,,TRUE,,,,
Miguel,Farbrace,mfarbrace14@barnesandnoble.com,mfarbrace14,,FALSE,O'Keefe Inc,1 Mallory Avenue,,,,,,,Assistant Manager,a libero nam dui proin leo odio porttitor id consequat in consequat ut nulla sed accumsan felis,,Schmeler-Krajcik,,FALSE,,,,
Em,,,ekittley15,,FALSE,Schuppe-Barrows,9946 Canary Pass,,,,,,,Nuclear Power Engineer,odio curabitur convallis duis consequat dui nec nisi,,"Abshire, Goyette and Spinka",,TRUE,,,,
Bill,Morales,bmorales16@addtoany.com,bmorales16,,TRUE,Leannon Inc,0 Hudson Circle,,,,,,,,,,,,TRUE,,,,
Spenser,Branca,sbranca17@tripod.com,sbranca17,,FALSE,Halvorson Inc,7904 Green Road,,,,,,,,,,,,FALSE,,,,
Dawna,Ainslee,dainslee18@nifty.com,dainslee18,,TRUE,"Strosin, Collier and O'Connell",17 Granby Center,,,,,,,,,,,,FALSE,,,,
Lind,Fontanet,lfontanet19@lycos.com,lfontanet19,,FALSE,Bins-Kunde,84 Kenwood Junction,,,,,,,,,,"Romaguera, Adams and Schoen",,FALSE,,,,
Ashli,Gheorghie,agheorghie1a@blogtalkradio.com,agheorghie1a,,FALSE,Hauck Inc,8 Warrior Drive,,,,,,,,,,Wisozk Inc,,FALSE,,,,
Janice,Freddi,jfreddi1b@behance.net,jfreddi1b,,TRUE,"Stoltenberg, Aufderhar and Schaden",0 Esch Alley,,,,,,,,,,,,FALSE,,,,
Reinwald,Ivakhin,rivakhin1c@ask.com,rivakhin1c,,FALSE,Jacobson-Mosciski,24 New Castle Alley,,,,,,,,,,Welch and Sons,,TRUE,,,,
Lindsey,Trevance,ltrevance1d@prnewswire.com,ltrevance1d,,TRUE,Hansen-Luettgen,17443 Lindbergh Plaza,,,,,,,Web Designer II,interdum eu tincidunt in leo maecenas pulvinar lobortis est phasellus,,,,FALSE,,,,
Cordi,Frostdyke,cfrostdyke1e@weather.com,cfrostdyke1e,,FALSE,Kohler Inc,53066 Merchant Plaza,,,,,,,,,,,,FALSE,,,,
Jayme,Piatto,jpiatto1f@slate.com,jpiatto1f,,TRUE,Johnson and Sons,5598 Fuller Avenue,,,,,,,Graphic Designer,accumsan felis ut at dolor quis odio consequat varius integer,,,,TRUE,,,,
Henriette,Glanvill,hglanvill1g@ifeng.com,hglanvill1g,,TRUE,"Mills, Kautzer and Stiedemann",6461 Stang Center,,,,,,,,,,Gibson and Sons,,TRUE,,,,
Izak,Legen,ilegen1h@berkeley.edu,ilegen1h,,TRUE,"Schiller, Runolfsson and Gottlieb",86874 Hovde Avenue,,,,,,,,,,,,FALSE,,,,
Silas,Vallentin,svallentin1i@zdnet.com,svallentin1i,,FALSE,Wolff Inc,15041 Graceland Park,,,,,,,,,,,,TRUE,,,,
Ansel,Augustus,aaugustus1j@oaic.gov.au,aaugustus1j,,TRUE,"Rippin, Frami and Parker",843 Nova Alley,,,,,,,Assistant Media Planner,ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae donec,,Morissette and Sons,,FALSE,,,,
Annemarie,Reburn,areburn1k@networksolutions.com,areburn1k,,TRUE,Dach Group,05 Crowley Avenue,,,,,,,Administrative Assistant IV,vivamus tortor duis mattis egestas metus aenean fermentum donec,,"Murazik, Wyman and Yost",,FALSE,,,,
Fee,Bissell,fbissell1l@comsenz.com,fbissell1l,,TRUE,Braun Group,678 Nelson Hill,,,,,,,Health Coach IV,sed augue aliquam erat volutpat in congue etiam justo etiam pretium iaculis justo in,,"Lindgren, Quitzon and Heathcote",,TRUE,,,,
Zenia,Kordt,zkordt1m@com.com,zkordt1m,,TRUE,"Harvey, Fay and Yundt",6337 Mayer Trail,,,,,,,Associate Professor,congue etiam justo etiam pretium iaculis justo in hac habitasse platea dictumst etiam faucibus cursus urna,,,,TRUE,,,,
Winthrop,Eales,weales1n@stanford.edu,weales1n,,TRUE,Johns-Kshlerin,79780 Helena Lane,,,,,,,Accountant I,platea dictumst etiam faucibus cursus urna ut,,,,FALSE,,,,
Davis,,,dnatalie1o,,FALSE,Tillman-Marquardt,3893 Express Junction,,,,,https://answers.com,266-409-9118,Teacher,suspendisse accumsan tortor quis turpis sed ante vivamus tortor,,Casper-Grimes,Davis Natalie,FALSE,FALSE,2022-04-08,2022-09-24,dnatalie1o@altervista.org
Massimiliano,Fardo,mfardo1p@imgur.com,mfardo1p,,TRUE,Kozey Group,72 Hauk Terrace,,,,,,,Account Coordinator,parturient montes nascetur ridiculus mus etiam vel augue vestibulum rutrum rutrum neque aenean auctor gravida sem praesent id,,Bednar Inc,,FALSE,,,,
Dacey,Larrie,dlarrie1q@digg.com,dlarrie1q,,FALSE,Jerde-Ullrich,70371 Del Mar Center,,,,,,,,,,,,TRUE,,,,
Pattie,Melvin,pmelvin1r@discovery.com,pmelvin1r,,FALSE,"McDermott, Mayert and Kemmer",845 Anderson Point,,,,,,,Safety Technician II,sit amet erat nulla tempus vivamus in felis eu sapien cursus vestibulum proin,,,,TRUE,,,,
Franny,Laughlin,flaughlin1s@blogspot.com,flaughlin1s,,FALSE,Renner-Terry,94 Northfield Pass,,,,,,,,,,"Parisian, Hudson and Bahringer",,FALSE,,,,
Mariel,Roelvink,mroelvink1t@timesonline.co.uk,mroelvink1t,,TRUE,Russel-Blanda,434 Crest Line Road,,,,,http://amazon.de,429-401-0847,Quality Engineer,vel pede morbi porttitor lorem id ligula suspendisse ornare consequat lectus in est risus auctor sed tristique in tempus,,,Mariel Roelvink,TRUE,FALSE,2022-02-21,2022-09-01,mroelvink1t@feedburner.com
Josee,Ghirardi,jghirardi1u@arizona.edu,jghirardi1u,,TRUE,Koss-Schmitt,96 Kingsford Avenue,,,,,,,,,,,,TRUE,,,,
Felix,Pheasant,fpheasant1v@soundcloud.com,fpheasant1v,,TRUE,Rogahn Group,43 Northridge Place,,,,,,,,,,Hoppe-O'Reilly,,FALSE,,,,
Stearne,Gwatkins,sgwatkins1w@jugem.jp,sgwatkins1w,,FALSE,"Koch, Ferry and Marks",6 Victoria Circle,,,,,,,,,,,,FALSE,,,,
Nathaniel,Parkinson,nparkinson1x@springer.com,nparkinson1x,,TRUE,Harber Group,4589 Clarendon Way,,,,,,,Software Consultant,non mattis pulvinar nulla pede ullamcorper augue a suscipit nulla elit ac nulla sed vel enim sit amet nunc viverra,,Koepp LLC,,TRUE,,,,
Blondelle,Crawley,bcrawley1y@ezinearticles.com,bcrawley1y,,TRUE,"Hirthe, Bashirian and Feeney",17149 Ridge Oak Park,,,,,,,Help Desk Technician,sit amet cursus id turpis integer aliquet massa id lobortis convallis tortor risus dapibus augue vel accumsan tellus nisi eu,,,,TRUE,,,,
Pammi,Yair,pyair1z@virginia.edu,pyair1z,,TRUE,"Pfeffer, Schmeler and Dibbert",541 Beilfuss Alley,,,,,,,,,,,,TRUE,,,,
Tremain,Lattimer,tlattimer20@go.com,tlattimer20,,TRUE,"Kuvalis, Kris and Howell",19 Red Cloud Parkway,,,,,,,,,,Gutkowski LLC,,TRUE,,,,
Moreen,Fermin,mfermin21@w3.org,mfermin21,,FALSE,"Romaguera, Spinka and Bayer",50 Eagle Crest Circle,,,,,,,,,,,,TRUE,,,,
Jena,Taborre,jtaborre22@pinterest.com,jtaborre22,,TRUE,Raynor Group,97 Helena Center,,,,,,,Dental Hygienist,vel enim sit amet nunc viverra dapibus nulla suscipit ligula in lacus curabitur at ipsum ac tellus semper interdum mauris,,,,FALSE,,,,
Odille,Stede,ostede23@biglobe.ne.jp,ostede23,,TRUE,"Boyle, Schowalter and Mayer",88993 Sunbrook Street,,,,,http://live.com,464-815-6024,,,,,Odille Stede,TRUE,FALSE,2021-12-12,2022-06-27,ostede23@lycos.com
Kori,Fulk,kfulk24@tiny.cc,kfulk24,,TRUE,Konopelski and Sons,43 Mockingbird Avenue,,,,,,,,,,"Nikolaus, Cassin and Streich",,TRUE,,,,
Pollyanna,Cardon,pcardon25@infoseek.co.jp,pcardon25,,FALSE,Hickle Group,52088 Almo Junction,,,,,,,,,,"Cronin, Cummerata and Tromp",,FALSE,,,,
Austin,McGeneay,amcgeneay26@tmall.com,amcgeneay26,,TRUE,Yundt-Howell,021 4th Park,,,,,,,Social Worker,est phasellus sit amet erat nulla tempus vivamus in felis eu sapien cursus vestibulum proin eu mi nulla,,,,TRUE,,,,
Imogen,Hamill,ihamill27@w3.org,ihamill27,,FALSE,Herman-Schulist,802 Sunbrook Place,,,,,http://vistaprint.com,344-665-1217,Registered Nurse,curabitur convallis duis consequat dui nec nisi volutpat,,,Imogen Hamill,FALSE,FALSE,2021-12-03,2023-04-16,ihamill27@over-blog.com
Hershel,Bielfeld,hbielfeld28@soup.io,hbielfeld28,,TRUE,Kreiger and Sons,6944 Buell Trail,,,,,,,Actuary,curae donec pharetra magna vestibulum aliquet ultrices erat,,Schmitt-Abbott,,TRUE,,,,
Korry,,,ksteckings29,,TRUE,Bogan Inc,800 Ilene Parkway,,,,,,,,,,,,TRUE,,,,
Cookie,Warret,cwarret2a@sakura.ne.jp,cwarret2a,,FALSE,Murphy-Yost,9 Vera Terrace,,,,,,,Mechanical Systems Engineer,semper rutrum nulla nunc purus phasellus in felis donec semper sapien a libero nam dui proin leo odio,,"Lueilwitz, Beahan and Raynor",,FALSE,,,,
Wynne,Gonnely,wgonnely2b@facebook.com,wgonnely2b,,TRUE,"Frami, Erdman and Mayert",051 Kenwood Junction,,,,,,,,,,,,TRUE,,,,
Ethelred,Bogey,ebogey2c@infoseek.co.jp,ebogey2c,,TRUE,Christiansen and Sons,7414 2nd Pass,,,,,,,Media Manager II,donec odio justo sollicitudin ut suscipit a feugiat et eros vestibulum ac est lacinia,,,,FALSE,,,,
Alvera,Tunuy,atunuy2d@bizjournals.com,atunuy2d,,FALSE,"Vandervort, Veum and Walker",152 Division Park,,,,,,,,,,"Bartell, Hartmann and Jerde",,FALSE,,,,
Martino,Rosenbusch,mrosenbusch2e@seesaa.net,mrosenbusch2e,,TRUE,Parisian-Romaguera,130 Westridge Alley,,,,,http://bravesites.com,626-888-4072,,,,"Keebler, Walter and Senger",Martino Rosenbusch,FALSE,FALSE,2022-01-20,2022-09-11,mrosenbusch2e@about.me
Susi,Trapp,strapp2f@ft.com,strapp2f,,FALSE,"Rogahn, Volkman and McDermott",72958 Vahlen Avenue,,,,,,,,,,Nitzsche-Langosh,,TRUE,,,,
Gordon,Alflatt,galflatt2g@marriott.com,galflatt2g,,FALSE,Effertz-Howell,0681 International Plaza,,,,,,,Research Associate,duis aliquam convallis nunc proin,,"Farrell, Hoeger and O'Keefe",,TRUE,,,,
Derrick,Braidon,dbraidon2h@blogs.com,dbraidon2h,,FALSE,Prosacco-Walker,8760 Del Sol Circle,,,,,,,,,,Koss-Bogisich,,TRUE,,,,
Minnnie,Bonar,mbonar2i@biglobe.ne.jp,mbonar2i,,TRUE,Daniel LLC,5424 Karstens Alley,,,,,,,Web Designer III,faucibus orci luctus et ultrices posuere cubilia curae mauris,,,,TRUE,,,,
Casper,Sinnatt,csinnatt2j@hc360.com,csinnatt2j,,TRUE,Barrows-Mertz,79 Melvin Center,,,,,,,,,,,,FALSE,,,,
Chloe,Fist,cfist2k@auda.org.au,cfist2k,,FALSE,"Kling, Streich and Kertzmann",47064 Glacier Hill Court,,,,,,,,,,Altenwerth-Leuschke,,TRUE,,,,
Elysha,Gosenell,egosenell2l@ft.com,egosenell2l,,TRUE,Hirthe LLC,70 Old Gate Alley,,,,,,,Nuclear Power Engineer,amet cursus id turpis integer aliquet massa id lobortis convallis tortor risus dapibus augue vel accumsan tellus,,Macejkovic and Sons,,FALSE,,,,
Gerianna,Feirn,gfeirn2m@bing.com,gfeirn2m,,TRUE,"Collier, Kirlin and Armstrong",881 Summer Ridge Circle,,,,,,,,,,,,FALSE,,,,
Lucas,Mulvany,lmulvany2n@deliciousdays.com,lmulvany2n,,FALSE,Bahringer Group,639 La Follette Circle,,,,,,,,,,,,TRUE,,,,
Lenore,Menendez,lmenendez2o@cdbaby.com,lmenendez2o,,TRUE,"Nader, Harvey and Casper",02 Springs Avenue,,,,,https://a8.net,926-526-1742,Community Outreach Specialist,ut odio cras mi pede malesuada in imperdiet et commodo vulputate justo in blandit ultrices enim lorem ipsum dolor,,,Lenore Menendez,TRUE,FALSE,2022-01-11,2022-07-29,lmenendez2o@ifeng.com
Collete,Brandes,cbrandes2p@accuweather.com,cbrandes2p,,TRUE,Koepp-Parisian,5 Haas Way,,,,,,,,,,,,FALSE,,,,
Osborne,Gummory,ogummory2q@1und1.de,ogummory2q,,FALSE,Mertz and Sons,91749 Haas Alley,,,,,,,,,,,,TRUE,,,,
Emiline,Grossman,egrossman2r@dmoz.org,egrossman2r,,TRUE,Parisian and Sons,3872 Eagle Crest Court,,,,,https://uiuc.edu,338-830-8647,Food Chemist,dolor vel est donec odio justo sollicitudin ut suscipit a feugiat et eros vestibulum ac est lacinia nisi venenatis,,Williamson-Casper,Emiline Grossman,TRUE,TRUE,2021-11-10,2022-10-01,egrossman2r@spiegel.de
1 First Name Last Name Email Username Display Name Activated Location Address City State Country Postal Code Website Phone Job Title Notes Employee Number Company Manager Remote VIP Start Date End Date Gravatar
2 Reagen Tenant rtenant0@istockphoto.com rtenant0 Heywood true TRUE Braun, Ullrich and O'Hara 0406 Emmet Drive https://netvibes.com 895-137-2034 Nurse Practicioner ac tellus semper interdum mauris ullamcorper purus sit amet nulla quisque arcu libero rutrum Reagen Tenant true TRUE true TRUE 2022-03-18 2022-12-04 rtenant0@soup.io
3 Kenneth Lefeuvre klefeuvre1@woothemes.com klefeuvre1 false FALSE Mueller LLC 404 Dennis Alley Senior Quality Engineer lacus at turpis donec posuere metus vitae ipsum true TRUE
4 Kiel Eland keland2@tinyurl.com keland2 false FALSE Mayer, Jacobi and Gibson 3058 Declaration Park Web Developer I eu est congue elementum in hac habitasse platea dictumst morbi vestibulum velit id true TRUE
5 Susana Kinneally skinneally3@purevolume.com skinneally3 George false FALSE Block Inc 1 Chive Alley Software Consultant phasellus in felis donec semper sapien a libero nam dui proin leo odio porttitor id consequat true TRUE
6 Wallis Hadcock whadcock4@abc.net.au whadcock4 false FALSE Roob-Bartoletti 496 Hazelcrest Terrace Information Systems Manager nam congue risus semper porta volutpat quam pede lobortis ligula sit amet eleifend Hand, Rohan and Oberbrunner false FALSE
7 Audry Piell apiell5@china.com.cn apiell5 false FALSE Schoen-Hilpert 3136 Talmadge Circle Chemical Engineer congue risus semper porta volutpat quam pede lobortis ligula sit amet eleifend pede libero quis orci nullam false FALSE
8 Veronike Poytress vpoytress6@scribd.com vpoytress6 Paul false FALSE D'Amore, Schoen and Rogahn 3 Northwestern Hill http://acquirethisname.com 198-980-1723 Compensation Analyst non mattis pulvinar nulla pede ullamcorper augue a suscipit nulla elit ac nulla sed vel enim sit amet Veronike Poytress true TRUE true TRUE 2022-05-10 2022-08-14 vpoytress6@ed.gov
9 Sibel Serris sserris7@mayoclinic.com sserris7 true TRUE Swaniawski and Sons 090 Summit Road false FALSE
10 Aldis Smardon asmardon8@ifeng.com asmardon8 false FALSE Huels-Reinger 2 Brown Trail true TRUE
11 Juan jlowseley9 Awesomesauce true TRUE Nicolas and Sons 0 Village Pass Cost Accountant phasellus id sapien in sapien true TRUE
12 Thaine Coger tcogera@naver.com tcogera false FALSE Zieme-Davis 31 Little Fleur Park true TRUE
13 Adrien Ciotti aciottib@ucoz.ru aciottib true TRUE Ward, Wolff and King 61 Graedel Hill false FALSE
14 Harmony Vanetti hvanettic@wordpress.com hvanettic true TRUE Kulas, Heller and Cormier 35 Hintze Drive Wyman-Jenkins true TRUE
15 Pansie Morston pmorstond@ebay.com pmorstond false FALSE Mosciski-Graham 73222 Walton Street false FALSE
16 Court Halse chalsee@walmart.com chalsee Test true TRUE O'Reilly, Hilll and Stokes 61514 Pepper Wood Trail false FALSE
17 Gerardo Scrowby gscrowbyf@multiply.com gscrowbyf false FALSE Cruickshank-Kling 18314 Schlimgen Point false FALSE
18 Imojean Veare iveareg@chronoengine.com iveareg Testtest false FALSE Schultz-Lakin 9 Blaine Street https://soup.io 502-710-6094 Environmental Tech consequat lectus in est risus auctor sed Imojean Veare false FALSE true TRUE 2022-01-24 2022-08-06 iveareg@answers.com
19 Samuel Bickley sbickleyh@gravatar.com sbickleyh true TRUE Langworth-Friesen 5891 Bunker Hill Crossing Corkery and Sons false FALSE
20 Niall Ethington nethingtoni@google.fr nethingtoni true TRUE Ledner, Klocko and Sipes 511 Springs Parkway false FALSE
21 Elfreda Ilyukhov eilyukhovj@mashable.com eilyukhovj false FALSE Spinka-Ortiz 475 Bluestem Point Clinical Specialist felis ut at dolor quis odio consequat varius integer ac true TRUE
22 Serena Josling sjoslingk@oracle.com sjoslingk false FALSE Wuckert-Schuster 10512 Fuller Avenue Cruickshank, Ziemann and Kreiger false FALSE
23 Sheelah Dockwray sdockwrayl@narod.ru sdockwrayl true TRUE Orn-Koss 4241 Scofield Circle Nurse vestibulum sed magna at nunc commodo placerat praesent blandit nam nulla integer pede Hermann-Anderson true TRUE
24 Lanette Remnant lremnantm@vinaora.com lremnantm false FALSE Abshire LLC 8 Buena Vista Junction General Manager mauris ullamcorper purus sit amet Bahringer-Lockman false FALSE
25 Jordan Pritty jprittyn@reverbnation.com jprittyn false FALSE Stroman LLC 36 Becker Plaza Durgan-Bosco true TRUE
26 Lorrin Boni lbonio@msn.com lbonio true TRUE Bogisich-Nolan 7 Messerschmidt Point false FALSE
27 Marie-ann Waind mwaindp@ucoz.ru mwaindp true TRUE Hartmann, Weissnat and Cassin 68082 Schmedeman Court Nurse duis faucibus accumsan odio curabitur convallis duis consequat true TRUE
28 Marti Daens mdaensq@huffingtonpost.com mdaensq false FALSE Robel-Roob 7 Knutson Pass http://gov.uk 381-382-8857 Electrical Engineer sapien a libero nam dui proin leo Marti Daens false FALSE true TRUE 2021-12-19 2022-12-08 mdaensq@themeforest.net
29 Scotti Gillison sgillisonr@intel.com sgillisonr true TRUE Howe-Collins 44 Elka Terrace Financial Advisor viverra eget congue eget semper rutrum nulla nunc purus true TRUE
30 Bobbe Alven balvens@csmonitor.com balvens true TRUE Weimann-Bernhard 71 Manley Park Champlin-Turcotte false FALSE
31 Ferdy Kincade fkincadet@wsj.com fkincadet true TRUE Bode Inc 3023 Novick Alley Statistician IV amet nulla quisque arcu libero true TRUE
32 Rachael Briers rbriersu@vimeo.com rbriersu false FALSE Koch and Sons 71 Shoshone Court true TRUE
33 Ado Bartholin abartholinv@ft.com abartholinv false FALSE Buckridge, Klein and Johnston 11 Jenna Avenue false FALSE
34 Tessy tsailerw false FALSE Parker-Beer 0964 Vidon Way Structural Engineer aliquet ultrices erat tortor sollicitudin true TRUE
35 Chloe Gebbie cgebbiex@cam.ac.uk cgebbiex false FALSE Smith Inc 8 5th Alley true TRUE
36 Emlyn Cusick ecusicky@homestead.com ecusicky true TRUE Dickens LLC 43 Canary Point Health Coach II eu tincidunt in leo maecenas pulvinar lobortis est phasellus sit amet erat nulla tempus vivamus in true TRUE
37 Kenneth McGuire kmcguirez@scribd.com kmcguirez true TRUE Torphy, Bednar and Davis 2 Stone Corner Park Nurse Practicioner tortor duis mattis egestas metus aenean fermentum donec ut mauris eget massa false FALSE
38 Berri Forson bforson10@pcworld.com bforson10 true TRUE D'Amore, Larkin and O'Keefe 266 Alpine Road Tax Accountant in purus eu magna vulputate luctus cum sociis natoque penatibus et true TRUE
39 Bree Jiru bjiru11@gravatar.com bjiru11 true TRUE Altenwerth LLC 58 4th Alley Farrell and Sons true TRUE
40 Kathie Dignan kdignan12@bbb.org kdignan12 true TRUE Pagac, Effertz and Padberg 973 Banding Point Marquardt, Cummings and Bosco true TRUE
41 Filbert Van Der Straaten fvanderstraaten13@sourceforge.net fvanderstraaten13 false FALSE Cronin, Mante and Klein 0 Stuart Junction Research Assistant I ut massa volutpat convallis morbi odio odio elementum eu interdum eu tincidunt in leo maecenas Bauch-Kling true TRUE
42 Miguel Farbrace mfarbrace14@barnesandnoble.com mfarbrace14 false FALSE O'Keefe Inc 1 Mallory Avenue Assistant Manager a libero nam dui proin leo odio porttitor id consequat in consequat ut nulla sed accumsan felis Schmeler-Krajcik false FALSE
43 Em ekittley15 false FALSE Schuppe-Barrows 9946 Canary Pass Nuclear Power Engineer odio curabitur convallis duis consequat dui nec nisi Abshire, Goyette and Spinka true TRUE
44 Bill Morales bmorales16@addtoany.com bmorales16 true TRUE Leannon Inc 0 Hudson Circle true TRUE
45 Spenser Branca sbranca17@tripod.com sbranca17 false FALSE Halvorson Inc 7904 Green Road false FALSE
46 Dawna Ainslee dainslee18@nifty.com dainslee18 true TRUE Strosin, Collier and O'Connell 17 Granby Center false FALSE
47 Lind Fontanet lfontanet19@lycos.com lfontanet19 false FALSE Bins-Kunde 84 Kenwood Junction Romaguera, Adams and Schoen false FALSE
48 Ashli Gheorghie agheorghie1a@blogtalkradio.com agheorghie1a false FALSE Hauck Inc 8 Warrior Drive Wisozk Inc false FALSE
49 Janice Freddi jfreddi1b@behance.net jfreddi1b true TRUE Stoltenberg, Aufderhar and Schaden 0 Esch Alley false FALSE
50 Reinwald Ivakhin rivakhin1c@ask.com rivakhin1c false FALSE Jacobson-Mosciski 24 New Castle Alley Welch and Sons true TRUE
51 Lindsey Trevance ltrevance1d@prnewswire.com ltrevance1d true TRUE Hansen-Luettgen 17443 Lindbergh Plaza Web Designer II interdum eu tincidunt in leo maecenas pulvinar lobortis est phasellus false FALSE
52 Cordi Frostdyke cfrostdyke1e@weather.com cfrostdyke1e false FALSE Kohler Inc 53066 Merchant Plaza false FALSE
53 Jayme Piatto jpiatto1f@slate.com jpiatto1f true TRUE Johnson and Sons 5598 Fuller Avenue Graphic Designer accumsan felis ut at dolor quis odio consequat varius integer true TRUE
54 Henriette Glanvill hglanvill1g@ifeng.com hglanvill1g true TRUE Mills, Kautzer and Stiedemann 6461 Stang Center Gibson and Sons true TRUE
55 Izak Legen ilegen1h@berkeley.edu ilegen1h true TRUE Schiller, Runolfsson and Gottlieb 86874 Hovde Avenue false FALSE
56 Silas Vallentin svallentin1i@zdnet.com svallentin1i false FALSE Wolff Inc 15041 Graceland Park true TRUE
57 Ansel Augustus aaugustus1j@oaic.gov.au aaugustus1j true TRUE Rippin, Frami and Parker 843 Nova Alley Assistant Media Planner ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae donec Morissette and Sons false FALSE
58 Annemarie Reburn areburn1k@networksolutions.com areburn1k true TRUE Dach Group 05 Crowley Avenue Administrative Assistant IV vivamus tortor duis mattis egestas metus aenean fermentum donec Murazik, Wyman and Yost false FALSE
59 Fee Bissell fbissell1l@comsenz.com fbissell1l true TRUE Braun Group 678 Nelson Hill Health Coach IV sed augue aliquam erat volutpat in congue etiam justo etiam pretium iaculis justo in Lindgren, Quitzon and Heathcote true TRUE
60 Zenia Kordt zkordt1m@com.com zkordt1m true TRUE Harvey, Fay and Yundt 6337 Mayer Trail Associate Professor congue etiam justo etiam pretium iaculis justo in hac habitasse platea dictumst etiam faucibus cursus urna true TRUE
61 Winthrop Eales weales1n@stanford.edu weales1n true TRUE Johns-Kshlerin 79780 Helena Lane Accountant I platea dictumst etiam faucibus cursus urna ut false FALSE
62 Davis dnatalie1o false FALSE Tillman-Marquardt 3893 Express Junction https://answers.com 266-409-9118 Teacher suspendisse accumsan tortor quis turpis sed ante vivamus tortor Casper-Grimes Davis Natalie false FALSE false FALSE 2022-04-08 2022-09-24 dnatalie1o@altervista.org
63 Massimiliano Fardo mfardo1p@imgur.com mfardo1p true TRUE Kozey Group 72 Hauk Terrace Account Coordinator parturient montes nascetur ridiculus mus etiam vel augue vestibulum rutrum rutrum neque aenean auctor gravida sem praesent id Bednar Inc false FALSE
64 Dacey Larrie dlarrie1q@digg.com dlarrie1q false FALSE Jerde-Ullrich 70371 Del Mar Center true TRUE
65 Pattie Melvin pmelvin1r@discovery.com pmelvin1r false FALSE McDermott, Mayert and Kemmer 845 Anderson Point Safety Technician II sit amet erat nulla tempus vivamus in felis eu sapien cursus vestibulum proin true TRUE
66 Franny Laughlin flaughlin1s@blogspot.com flaughlin1s false FALSE Renner-Terry 94 Northfield Pass Parisian, Hudson and Bahringer false FALSE
67 Mariel Roelvink mroelvink1t@timesonline.co.uk mroelvink1t true TRUE Russel-Blanda 434 Crest Line Road http://amazon.de 429-401-0847 Quality Engineer vel pede morbi porttitor lorem id ligula suspendisse ornare consequat lectus in est risus auctor sed tristique in tempus Mariel Roelvink true TRUE false FALSE 2022-02-21 2022-09-01 mroelvink1t@feedburner.com
68 Josee Ghirardi jghirardi1u@arizona.edu jghirardi1u true TRUE Koss-Schmitt 96 Kingsford Avenue true TRUE
69 Felix Pheasant fpheasant1v@soundcloud.com fpheasant1v true TRUE Rogahn Group 43 Northridge Place Hoppe-O'Reilly false FALSE
70 Stearne Gwatkins sgwatkins1w@jugem.jp sgwatkins1w false FALSE Koch, Ferry and Marks 6 Victoria Circle false FALSE
71 Nathaniel Parkinson nparkinson1x@springer.com nparkinson1x true TRUE Harber Group 4589 Clarendon Way Software Consultant non mattis pulvinar nulla pede ullamcorper augue a suscipit nulla elit ac nulla sed vel enim sit amet nunc viverra Koepp LLC true TRUE
72 Blondelle Crawley bcrawley1y@ezinearticles.com bcrawley1y true TRUE Hirthe, Bashirian and Feeney 17149 Ridge Oak Park Help Desk Technician sit amet cursus id turpis integer aliquet massa id lobortis convallis tortor risus dapibus augue vel accumsan tellus nisi eu true TRUE
73 Pammi Yair pyair1z@virginia.edu pyair1z true TRUE Pfeffer, Schmeler and Dibbert 541 Beilfuss Alley true TRUE
74 Tremain Lattimer tlattimer20@go.com tlattimer20 true TRUE Kuvalis, Kris and Howell 19 Red Cloud Parkway Gutkowski LLC true TRUE
75 Moreen Fermin mfermin21@w3.org mfermin21 false FALSE Romaguera, Spinka and Bayer 50 Eagle Crest Circle true TRUE
76 Jena Taborre jtaborre22@pinterest.com jtaborre22 true TRUE Raynor Group 97 Helena Center Dental Hygienist vel enim sit amet nunc viverra dapibus nulla suscipit ligula in lacus curabitur at ipsum ac tellus semper interdum mauris false FALSE
77 Odille Stede ostede23@biglobe.ne.jp ostede23 true TRUE Boyle, Schowalter and Mayer 88993 Sunbrook Street http://live.com 464-815-6024 Odille Stede true TRUE false FALSE 2021-12-12 2022-06-27 ostede23@lycos.com
78 Kori Fulk kfulk24@tiny.cc kfulk24 true TRUE Konopelski and Sons 43 Mockingbird Avenue Nikolaus, Cassin and Streich true TRUE
79 Pollyanna Cardon pcardon25@infoseek.co.jp pcardon25 false FALSE Hickle Group 52088 Almo Junction Cronin, Cummerata and Tromp false FALSE
80 Austin McGeneay amcgeneay26@tmall.com amcgeneay26 true TRUE Yundt-Howell 021 4th Park Social Worker est phasellus sit amet erat nulla tempus vivamus in felis eu sapien cursus vestibulum proin eu mi nulla true TRUE
81 Imogen Hamill ihamill27@w3.org ihamill27 false FALSE Herman-Schulist 802 Sunbrook Place http://vistaprint.com 344-665-1217 Registered Nurse curabitur convallis duis consequat dui nec nisi volutpat Imogen Hamill false FALSE false FALSE 2021-12-03 2023-04-16 ihamill27@over-blog.com
82 Hershel Bielfeld hbielfeld28@soup.io hbielfeld28 true TRUE Kreiger and Sons 6944 Buell Trail Actuary curae donec pharetra magna vestibulum aliquet ultrices erat Schmitt-Abbott true TRUE
83 Korry ksteckings29 true TRUE Bogan Inc 800 Ilene Parkway true TRUE
84 Cookie Warret cwarret2a@sakura.ne.jp cwarret2a false FALSE Murphy-Yost 9 Vera Terrace Mechanical Systems Engineer semper rutrum nulla nunc purus phasellus in felis donec semper sapien a libero nam dui proin leo odio Lueilwitz, Beahan and Raynor false FALSE
85 Wynne Gonnely wgonnely2b@facebook.com wgonnely2b true TRUE Frami, Erdman and Mayert 051 Kenwood Junction true TRUE
86 Ethelred Bogey ebogey2c@infoseek.co.jp ebogey2c true TRUE Christiansen and Sons 7414 2nd Pass Media Manager II donec odio justo sollicitudin ut suscipit a feugiat et eros vestibulum ac est lacinia false FALSE
87 Alvera Tunuy atunuy2d@bizjournals.com atunuy2d false FALSE Vandervort, Veum and Walker 152 Division Park Bartell, Hartmann and Jerde false FALSE
88 Martino Rosenbusch mrosenbusch2e@seesaa.net mrosenbusch2e true TRUE Parisian-Romaguera 130 Westridge Alley http://bravesites.com 626-888-4072 Keebler, Walter and Senger Martino Rosenbusch false FALSE false FALSE 2022-01-20 2022-09-11 mrosenbusch2e@about.me
89 Susi Trapp strapp2f@ft.com strapp2f false FALSE Rogahn, Volkman and McDermott 72958 Vahlen Avenue Nitzsche-Langosh true TRUE
90 Gordon Alflatt galflatt2g@marriott.com galflatt2g false FALSE Effertz-Howell 0681 International Plaza Research Associate duis aliquam convallis nunc proin Farrell, Hoeger and O'Keefe true TRUE
91 Derrick Braidon dbraidon2h@blogs.com dbraidon2h false FALSE Prosacco-Walker 8760 Del Sol Circle Koss-Bogisich true TRUE
92 Minnnie Bonar mbonar2i@biglobe.ne.jp mbonar2i true TRUE Daniel LLC 5424 Karstens Alley Web Designer III faucibus orci luctus et ultrices posuere cubilia curae mauris true TRUE
93 Casper Sinnatt csinnatt2j@hc360.com csinnatt2j true TRUE Barrows-Mertz 79 Melvin Center false FALSE
94 Chloe Fist cfist2k@auda.org.au cfist2k false FALSE Kling, Streich and Kertzmann 47064 Glacier Hill Court Altenwerth-Leuschke true TRUE
95 Elysha Gosenell egosenell2l@ft.com egosenell2l true TRUE Hirthe LLC 70 Old Gate Alley Nuclear Power Engineer amet cursus id turpis integer aliquet massa id lobortis convallis tortor risus dapibus augue vel accumsan tellus Macejkovic and Sons false FALSE
96 Gerianna Feirn gfeirn2m@bing.com gfeirn2m true TRUE Collier, Kirlin and Armstrong 881 Summer Ridge Circle false FALSE
97 Lucas Mulvany lmulvany2n@deliciousdays.com lmulvany2n false FALSE Bahringer Group 639 La Follette Circle true TRUE
98 Lenore Menendez lmenendez2o@cdbaby.com lmenendez2o true TRUE Nader, Harvey and Casper 02 Springs Avenue https://a8.net 926-526-1742 Community Outreach Specialist ut odio cras mi pede malesuada in imperdiet et commodo vulputate justo in blandit ultrices enim lorem ipsum dolor Lenore Menendez true TRUE false FALSE 2022-01-11 2022-07-29 lmenendez2o@ifeng.com
99 Collete Brandes cbrandes2p@accuweather.com cbrandes2p true TRUE Koepp-Parisian 5 Haas Way false FALSE
100 Osborne Gummory ogummory2q@1und1.de ogummory2q false FALSE Mertz and Sons 91749 Haas Alley true TRUE
101 Emiline Grossman egrossman2r@dmoz.org egrossman2r true TRUE Parisian and Sons 3872 Eagle Crest Court https://uiuc.edu 338-830-8647 Food Chemist dolor vel est donec odio justo sollicitudin ut suscipit a feugiat et eros vestibulum ac est lacinia nisi venenatis Williamson-Casper Emiline Grossman true TRUE true TRUE 2021-11-10 2022-10-01 egrossman2r@spiegel.de
@@ -45,7 +45,7 @@ class SendAcceptanceReminderTest extends TestCase
]);
$headers = ['ID', 'Name'];
$rows = [
[$userA->id, $userA->present()->fullName()],
[$userA->id, $userA->display_name],
];
$this->artisan('snipeit:acceptance-reminder')
->expectsOutput("The following users do not have an email address:")
@@ -77,6 +77,7 @@ class ImportUsersTest extends ImportDataTestCase implements TestsPermissionsRequ
$this->assertEquals($row['email'], $newUser->email);
$this->assertEquals($row['firstName'], $newUser->first_name);
$this->assertEquals($row['lastName'], $newUser->last_name);
$this->assertEquals($row['displayName'], $newUser->display_name);
$this->assertEquals($row['employeeNumber'], $newUser->employee_num);
$this->assertEquals($row['companyName'], $newUser->company->name);
$this->assertEquals($row['location'], $newUser->location->name);
@@ -229,12 +230,22 @@ class ImportUsersTest extends ImportDataTestCase implements TestsPermissionsRequ
$updatedUser = User::query()->with(['company', 'location'])->find($user->id);
$updatedAttributes = [
'first_name', 'email', 'last_name', 'employee_num', 'company',
'location_id', 'company_id', 'updated_at', 'phone', 'jobtitle'
'first_name',
'display_name',
'email',
'last_name',
'employee_num',
'company',
'location_id',
'company_id',
'updated_at',
'phone',
'jobtitle',
];
$this->assertEquals($row['email'], $updatedUser->email);
$this->assertEquals($row['firstName'], $updatedUser->first_name);
$this->assertEquals($row['displayName'], $updatedUser->display_name);
$this->assertEquals($row['lastName'], $updatedUser->last_name);
$this->assertEquals($row['employeeNumber'], $updatedUser->employee_num);
$this->assertEquals($row['companyName'], $updatedUser->company->name);
@@ -249,6 +260,11 @@ class ImportUsersTest extends ImportDataTestCase implements TestsPermissionsRequ
);
}
/**
* Some of these should mismatch on purpose to ensure the mapping is working
* @return void
*/
#[Test]
public function customColumnMapping(): void
{
@@ -263,6 +279,7 @@ class ImportUsersTest extends ImportDataTestCase implements TestsPermissionsRequ
'phoneNumber' => $faker['employeeNumber'],
'position' => $faker['email'],
'username' => $faker['companyName'],
'dumbName' => $faker['displayName'],
];
$importFileBuilder = new ImportFileBuilder([$row]);
@@ -282,8 +299,11 @@ class ImportUsersTest extends ImportDataTestCase implements TestsPermissionsRequ
'Phone Number' => 'employee_num',
'Job Title' => 'email',
'Username' => 'company',
'dumbName' => 'display_name',
]
])->assertOk();
])->assertOk()
->json();
$newUser = User::query()
->with(['company', 'location'])
@@ -293,6 +313,7 @@ class ImportUsersTest extends ImportDataTestCase implements TestsPermissionsRequ
$this->assertEquals($row['position'], $newUser->email);
$this->assertEquals($row['location'], $newUser->first_name);
$this->assertEquals($row['lastName'], $newUser->last_name);
$this->assertEquals($row['dumbName'], $newUser->display_name);
$this->assertEquals($row['email'], $newUser->jobtitle);
$this->assertEquals($row['phoneNumber'], $newUser->employee_num);
$this->assertEquals($row['username'], $newUser->company->name);
@@ -31,15 +31,16 @@ class UsersImportFileBuilder extends FileBuilder
protected function getDictionary(): array
{
return [
'companyName' => 'Company',
'email' => 'email',
'employeeNumber' => 'Employee Number',
'companyName' => 'Company',
'email' => 'email',
'employeeNumber' => 'Employee Number',
'firstName' => 'First Name',
'lastName' => 'Last Name',
'location' => 'Location',
'phoneNumber' => 'Phone Number',
'position' => 'Job Title',
'username' => 'Username',
'lastName' => 'Last Name',
'displayName' => 'Display Name',
'location' => 'Location',
'phoneNumber' => 'Phone Number',
'position' => 'Job Title',
'username' => 'Username',
];
}
@@ -51,15 +52,16 @@ class UsersImportFileBuilder extends FileBuilder
$faker = fake();
return [
'companyName' => $faker->company,
'email' => Str::random(32) . "@{$faker->freeEmailDomain}",
'employeeNumber' => $faker->uuid,
'companyName' => $faker->company,
'email' => $faker->safeEmail(),
'employeeNumber' => $faker->uuid,
'firstName' => $faker->firstName,
'lastName' => $faker->lastName,
'location' => "{$faker->city}, {$faker->country}",
'phoneNumber' => $faker->phoneNumber,
'position' => $faker->jobTitle,
'username' => Str::random(),
'lastName' => $faker->lastName,
'displayName' => $faker->firstName,
'location' => "{$faker->city}, {$faker->country}",
'phoneNumber' => $faker->phoneNumber,
'position' => $faker->jobTitle,
'username' => $faker->userName(),
];
}
}
@@ -17,7 +17,7 @@ class UserFullNameTest extends TestCase
function () {
return [
'actor' => User::factory()->viewUsers()->create(),
'user' => User::factory()->create(['first_name' => 'Jim', 'last_name' => 'Bagg']),
'user' => User::factory()->create(['first_name' => 'Jim', 'last_name' => 'Bagg', 'display_name' => null]),
'assertions' => function ($rendered) {
Assert::assertStringContainsString('<a ', $rendered);
Assert::assertStringContainsString('Jim Bagg', $rendered);
@@ -30,7 +30,7 @@ class UserFullNameTest extends TestCase
function () {
return [
'actor' => User::factory()->viewUsers()->create(),
'user' => User::factory()->deleted()->create(['first_name' => 'Jim', 'last_name' => 'Bagg']),
'user' => User::factory()->deleted()->create(['first_name' => 'Jim', 'last_name' => 'Bagg', 'display_name' => 'Jim Baggins']),
'assertions' => function ($rendered) {
Assert::assertStringContainsString('<s><a ', $rendered);
Assert::assertStringContainsString('Jim Bagg', $rendered);
@@ -43,7 +43,7 @@ class UserFullNameTest extends TestCase
function () {
return [
'actor' => User::factory()->create(),
'user' => User::factory()->create(['first_name' => 'Jim', 'last_name' => 'Bagg']),
'user' => User::factory()->create(['first_name' => 'Jim', 'last_name' => 'Bagg', 'display_name' => 'Jim Bagg']),
'assertions' => function ($rendered) {
Assert::assertStringContainsString('<span>Jim Bagg', $rendered);
Assert::assertStringNotContainsString('<a ', $rendered);
@@ -56,7 +56,7 @@ class UserFullNameTest extends TestCase
function () {
return [
'actor' => User::factory()->create(),
'user' => User::factory()->deleted()->create(['first_name' => 'Jim', 'last_name' => 'Bagg']),
'user' => User::factory()->deleted()->create(['first_name' => 'Jim', 'last_name' => 'Bagg', 'display_name' => 'Jim Bagg']),
'assertions' => function ($rendered) {
Assert::assertStringContainsString('<s><span>Jim Bagg', $rendered);
},
@@ -82,6 +82,10 @@ class UserFullNameTest extends TestCase
{
['actor' => $actor, 'user' => $user, 'assertions' => $assertions] = $provided();
// $user->displayName();
// \Log::error($user->toArray());
$this->actingAs($actor);
$renderedTemplateString = View::make('blade.full-user-name', ['user' => $user])->render();