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:
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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'),
|
||||
|
||||
@@ -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')
|
||||
|
||||
@@ -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'),
|
||||
|
||||
@@ -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'),
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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'));
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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 = '';
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -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
@@ -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.'%\'');
|
||||
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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();
|
||||
// }
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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) =>
|
||||
|
||||
@@ -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');
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
}
|
||||
};
|
||||
@@ -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',
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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">
|
||||
|
||||
@@ -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 }}
|
||||
|
||||
@@ -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,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>
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user