From 05a68afab9a0e76addc2814592680768ede0d7e2 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 | 29 ++++++++++++++- 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, 78 insertions(+), 19 deletions(-) diff --git a/app/Http/Controllers/Api/UsersController.php b/app/Http/Controllers/Api/UsersController.php index bc111fb31f..fad3be7693 100644 --- a/app/Http/Controllers/Api/UsersController.php +++ b/app/Http/Controllers/Api/UsersController.php @@ -402,7 +402,9 @@ class UsersController extends Controller } 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')); @@ -502,7 +504,9 @@ class UsersController extends Controller app('App\Http\Requests\ImageUploadRequest')->handleImages($user, 600, 'image', 'avatars', 'avatar'); - + + $user->customFill($request,Auth::user()); + if ($user->save()) { // Check if the request has groups passed and has a value, AND that the user us a superuser diff --git a/app/Http/Controllers/Users/UsersController.php b/app/Http/Controllers/Users/UsersController.php index 8df5842929..bd6fc89793 100755 --- a/app/Http/Controllers/Users/UsersController.php +++ b/app/Http/Controllers/Users/UsersController.php @@ -130,6 +130,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')); @@ -321,7 +324,31 @@ class UsersController extends Controller } - return redirect()->route('users.index')->with('error', trans('admin/users/message.user_not_found', compact('id'))); + $permissions_array = $request->input('permission'); + + // Strip out the superuser permission if the user isn't a superadmin + if (!Auth::user()->isSuperUser()) { + unset($permissions_array['superuser']); + $permissions_array['superuser'] = $orig_superuser; + } + + $user->permissions = json_encode($permissions_array); + + // 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? + if ($user->save()) { + // Redirect to the user page + return redirect()->route('users.index') + ->with('success', trans('admin/users/message.success.update')); + } + + return redirect()->back()->withInput()->withErrors($user->getErrors()); } /** 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 a83197763e..713c0da8ab 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 3c49ef8f7e..75e0bff108 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, $item->{$field->db_column_name()}) : $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 9a2a039af7..e3382dd7f6 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 --}} +