From 636da2ab5eef023bb9d0b0427d2ade5355dfcee0 Mon Sep 17 00:00:00 2001 From: Brady Wetherington Date: Tue, 5 Sep 2023 16:01:53 +0100 Subject: [PATCH] Wiring up custom fields for users - still some big UI challenges tho --- app/Http/Controllers/Api/UsersController.php | 8 +++- .../Controllers/Users/UsersController.php | 5 +++ app/Models/Traits/HasCustomFields.php | 3 +- resources/views/hardware/edit.blade.php | 11 ++---- .../views/models/custom_fields_form.blade.php | 37 +++++++++++++++---- resources/views/users/edit.blade.php | 9 +++++ 6 files changed, 55 insertions(+), 18 deletions(-) diff --git a/app/Http/Controllers/Api/UsersController.php b/app/Http/Controllers/Api/UsersController.php index e42917bff2..29930d2697 100644 --- a/app/Http/Controllers/Api/UsersController.php +++ b/app/Http/Controllers/Api/UsersController.php @@ -372,7 +372,9 @@ class UsersController extends Controller $user->password = bcrypt($request->get('password', $tmp_pass)); app('App\Http\Requests\ImageUploadRequest')->handleImages($user, 600, 'image', 'avatars', 'avatar'); - + + $user->customFill($request,Auth::user()); + if ($user->save()) { if ($request->filled('groups')) { $user->groups()->sync($request->input('groups')); @@ -463,7 +465,9 @@ class UsersController extends Controller app('App\Http\Requests\ImageUploadRequest')->handleImages($user, 600, 'image', 'avatars', 'avatar'); - + + $user->customFill($request,Auth::user()); + if ($user->save()) { // Sync group memberships: diff --git a/app/Http/Controllers/Users/UsersController.php b/app/Http/Controllers/Users/UsersController.php index 25a64e5cb2..ad769f9cb5 100755 --- a/app/Http/Controllers/Users/UsersController.php +++ b/app/Http/Controllers/Users/UsersController.php @@ -133,6 +133,9 @@ class UsersController extends Controller // we have to invoke the app(ImageUploadRequest::class)->handleImages($user, 600, 'avatar', 'avatars', 'avatar'); + \Log::info("About to call customFill, in the 'store' controller!!!"); + $user->customFill($request, Auth::user()); + if ($user->save()) { if ($request->filled('groups')) { $user->groups()->sync($request->input('groups')); @@ -300,6 +303,8 @@ class UsersController extends Controller // Handle uploaded avatar app(ImageUploadRequest::class)->handleImages($user, 600, 'avatar', 'avatars', 'avatar'); + \Log::debug("calling custom fill from the UPDATE method!"); + $user->customFill($request, Auth::user()); //\Log::debug(print_r($user, true)); // Was the user updated? diff --git a/app/Models/Traits/HasCustomFields.php b/app/Models/Traits/HasCustomFields.php index b3f8b52977..8dcfe3cffd 100644 --- a/app/Models/Traits/HasCustomFields.php +++ b/app/Models/Traits/HasCustomFields.php @@ -42,7 +42,7 @@ trait HasCustomFields public function getFieldset(): ?CustomFieldset { $pivot = $this->getFieldsetKey(); if(is_int($pivot)) { //why does this look just like the other thing? (below, look for is_int() - return Fieldset::find($pivot); + return CustomFieldset::find($pivot); } return $pivot->fieldset; } @@ -113,7 +113,6 @@ trait HasCustomFields } public function customFill(Request $request, User $user, bool $shouldSetDefaults = false) { - $this->_filled = true; if ($this->getFieldset()) { foreach ($this->getFieldset()->fields as $field) { if (is_array($request->input($field->db_column))) { diff --git a/resources/views/hardware/edit.blade.php b/resources/views/hardware/edit.blade.php index aff215ae26..1c1eb91b66 100755 --- a/resources/views/hardware/edit.blade.php +++ b/resources/views/hardware/edit.blade.php @@ -75,20 +75,17 @@
- @if ($item->model && $item->model->fieldset) - model; ?> - @endif @if (Request::old('model_id')) @php - $model = \App\Models\AssetModel::find(old('model_id')); + $item->model = \App\Models\AssetModel::find(old('model_id')); @endphp @elseif (isset($selected_model)) @php - $model = $selected_model; + $item->model_id = $selected_model; @endphp @endif - @if (isset($model) && $model) - @include("models/custom_fields_form",["model" => $model]) + @if ($item->getFieldset()) + @include("models/custom_fields_form",["item" => $item]) @endif
diff --git a/resources/views/models/custom_fields_form.blade.php b/resources/views/models/custom_fields_form.blade.php index bae98373e4..e58b015602 100644 --- a/resources/views/models/custom_fields_form.blade.php +++ b/resources/views/models/custom_fields_form.blade.php @@ -1,5 +1,28 @@ -@if (($model) && ($model->fieldset)) - @foreach($model->fieldset->fields AS $field) +{{-- + +Okay, now how am I going to work *this* out. I think it's less bad than I think. + +I think we can pass the $asset or the $user to this partial. + +This partial can be aware of the HasCustomFields trait, and call getFieldset() to get the appropriate fieldset; that's good. + +But we also need the 'discriminator' so that we can use defaultValuesForCustomFields, right? + +Well, that should be easy enough, right? Just call getFieldsetKey(), right? Or maybe we don't even have to do that - + +We can call $item->getDefaultValue($field), right? + +So the old way - already on this page - is: + +$item->defaultValue($field)) + +And we just do a simple 'replace' to make it be: + +$item->defaultValue($field) +--}} + +@if ($item->getFieldset()) + @foreach($item->getFieldset()->fields AS $field)
@@ -12,14 +35,14 @@ Request::old($field->db_column_name(),(isset($item) ? Helper::gracefulDecrypt($field, htmlspecialchars($item->{$field->db_column_name()}, ENT_QUOTES)) : $field->defaultValue($model->id))), ['class'=>'format select2 form-control']) }} @elseif ($field->element=='textarea') - + @elseif ($field->element=='checkbox') @foreach ($field->formatFieldValuesAsArray() as $key => $value)
@@ -30,7 +53,7 @@
@@ -46,7 +69,7 @@
- +
@@ -54,7 +77,7 @@ @else @if (($field->field_encrypted=='0') || (Gate::allows('assets.view.encrypted_custom_fields'))) - + @else @endif diff --git a/resources/views/users/edit.blade.php b/resources/views/users/edit.blade.php index a8b5ddf05e..dd16d740ab 100755 --- a/resources/views/users/edit.blade.php +++ b/resources/views/users/edit.blade.php @@ -279,6 +279,15 @@ @include ('partials.forms.edit.image-upload', ['fieldname' => 'avatar', 'image_path' => app('users_upload_path')]) + {{-- FIXME - copypasta from hardware/edit.blade.php --}} +
+ + @if ($user->getFieldset()) + @include("models/custom_fields_form",["item" => $user]) + @endif +
+ {{-- FIXME - copypasts from hardware/edit.blade.php --}} +