From fb3b34e0f6773b47b30639def2fd0ddd7ab591a2 Mon Sep 17 00:00:00 2001 From: snipe Date: Tue, 29 Apr 2025 22:47:02 +0100 Subject: [PATCH 1/6] Add audit button to BS table partial Signed-off-by: snipe --- resources/views/partials/bootstrap-table.blade.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/resources/views/partials/bootstrap-table.blade.php b/resources/views/partials/bootstrap-table.blade.php index 6ff9e13b5..0c514cd37 100644 --- a/resources/views/partials/bootstrap-table.blade.php +++ b/resources/views/partials/bootstrap-table.blade.php @@ -371,6 +371,10 @@ actions += '{{ trans('general.clone_item') }} '; } + if ((row.available_actions) && (row.available_actions.audit === true)) { + actions += '{{ trans('general.audit') }} '; + } + if ((row.available_actions) && (row.available_actions.update === true)) { actions += '{{ trans('general.update') }} '; } else { From cb852fc20f4b91751355d618d5c9840b364c976e Mon Sep 17 00:00:00 2001 From: snipe Date: Tue, 29 Apr 2025 22:47:12 +0100 Subject: [PATCH 2/6] Added audit gate to API Signed-off-by: snipe --- app/Http/Transformers/AssetsTransformer.php | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/app/Http/Transformers/AssetsTransformer.php b/app/Http/Transformers/AssetsTransformer.php index 8b16a9a72..a4f4900a3 100644 --- a/app/Http/Transformers/AssetsTransformer.php +++ b/app/Http/Transformers/AssetsTransformer.php @@ -150,12 +150,13 @@ class AssetsTransformer } $permissions_array['available_actions'] = [ - 'checkout' => ($asset->deleted_at=='' && Gate::allows('checkout', Asset::class)) ? true : false, - 'checkin' => ($asset->deleted_at=='' && Gate::allows('checkin', Asset::class)) ? true : false, + 'checkout' => ($asset->deleted_at=='' && Gate::allows('checkout', $asset)) ? true : false, + 'checkin' => ($asset->deleted_at=='' && Gate::allows('checkin', $asset)) ? true : false, 'clone' => Gate::allows('create', Asset::class) ? true : false, - 'restore' => ($asset->deleted_at!='' && Gate::allows('create', Asset::class)) ? true : false, - 'update' => ($asset->deleted_at=='' && Gate::allows('update', Asset::class)) ? true : false, - 'delete' => ($asset->deleted_at=='' && $asset->assigned_to =='' && Gate::allows('delete', Asset::class) && ($asset->deleted_at == '')) ? true : false, + 'restore' => ($asset->deleted_at!='' && Gate::allows('create', $asset)) ? true : false, + 'update' => ($asset->deleted_at=='' && Gate::allows('update', $asset)) ? true : false, + 'audit' => Gate::allows('audit', $asset) ? true : false, + 'delete' => ($asset->deleted_at=='' && $asset->assigned_to =='' && Gate::allows('delete', $asset) && ($asset->deleted_at == '')) ? true : false, ]; From 5086c806582f4a8f3d1c0c60d9d3824ae1efc565 Mon Sep 17 00:00:00 2001 From: snipe Date: Tue, 29 Apr 2025 22:47:34 +0100 Subject: [PATCH 3/6] Invoke a validator, redirect to edit screen if invalid Signed-off-by: snipe --- .../Controllers/Assets/AssetCheckinController.php | 10 ++++++++++ .../Controllers/Assets/AssetCheckoutController.php | 9 +++++++++ app/Http/Controllers/Assets/AssetsController.php | 13 +++++++++++-- 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/Assets/AssetCheckinController.php b/app/Http/Controllers/Assets/AssetCheckinController.php index cf881b57c..bc9ae19c8 100644 --- a/app/Http/Controllers/Assets/AssetCheckinController.php +++ b/app/Http/Controllers/Assets/AssetCheckinController.php @@ -14,6 +14,7 @@ use Illuminate\Database\Eloquent\Builder; use Illuminate\Support\Facades\Log; use \Illuminate\Contracts\View\View; use \Illuminate\Http\RedirectResponse; +use Illuminate\Support\Facades\Validator; class AssetCheckinController extends Controller { @@ -40,6 +41,15 @@ class AssetCheckinController extends Controller if (!$asset->model) { return redirect()->route('hardware.show', $asset->id)->with('error', trans('admin/hardware/general.model_invalid_fix')); } + + // Validate custom fields on existing asset + $validator = Validator::make($asset->toArray(), $asset->customFieldValidationRules()); + + if ($validator->fails()) { + return redirect()->route('hardware.edit', $asset) + ->withErrors($validator); + } + $target_option = match ($asset->assigned_type) { 'App\Models\Asset' => trans('admin/hardware/form.redirect_to_type', ['type' => trans('general.asset_previous')]), 'App\Models\Location' => trans('admin/hardware/form.redirect_to_type', ['type' => trans('general.location')]), diff --git a/app/Http/Controllers/Assets/AssetCheckoutController.php b/app/Http/Controllers/Assets/AssetCheckoutController.php index 4d8c9ffda..26a993d80 100644 --- a/app/Http/Controllers/Assets/AssetCheckoutController.php +++ b/app/Http/Controllers/Assets/AssetCheckoutController.php @@ -12,6 +12,7 @@ use Illuminate\Database\Eloquent\ModelNotFoundException; use Illuminate\Support\Facades\Session; use \Illuminate\Contracts\View\View; use \Illuminate\Http\RedirectResponse; +use Illuminate\Support\Facades\Validator; class AssetCheckoutController extends Controller { @@ -36,6 +37,14 @@ class AssetCheckoutController extends Controller ->with('error', trans('admin/hardware/general.model_invalid_fix')); } + // Validate custom fields on existing asset + $validator = Validator::make($asset->toArray(), $asset->customFieldValidationRules()); + + if ($validator->fails()) { + return redirect()->route('hardware.edit', $asset) + ->withErrors($validator); + } + if ($asset->availableForCheckout()) { return view('hardware/checkout', compact('asset')) ->with('statusLabel_list', Helper::deployableStatusLabelList()) diff --git a/app/Http/Controllers/Assets/AssetsController.php b/app/Http/Controllers/Assets/AssetsController.php index 6391a3dd9..50810b043 100755 --- a/app/Http/Controllers/Assets/AssetsController.php +++ b/app/Http/Controllers/Assets/AssetsController.php @@ -877,10 +877,19 @@ class AssetsController extends Controller } - public function audit(Asset $asset) + public function audit(Asset $asset): View | RedirectResponse { - $settings = Setting::getSettings(); $this->authorize('audit', Asset::class); + $settings = Setting::getSettings(); + + // Validate custom fields on existing asset + $validator = Validator::make($asset->toArray(), $asset->customFieldValidationRules()); + + if ($validator->fails()) { + return redirect()->route('hardware.edit', $asset) + ->withErrors($validator); + } + $dt = Carbon::now()->addMonths($settings->audit_interval)->toDateString(); return view('hardware/audit')->with('asset', $asset)->with('item', $asset)->with('next_audit_date', $dt)->with('locations_list'); } From 9ff8b62cee881d0751a58e4693dbcbc39d59193f Mon Sep 17 00:00:00 2001 From: snipe Date: Tue, 29 Apr 2025 22:58:58 +0100 Subject: [PATCH 4/6] Updated icon Signed-off-by: snipe --- resources/views/custom_fields/index.blade.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/views/custom_fields/index.blade.php b/resources/views/custom_fields/index.blade.php index ee2778d77..df70059da 100644 --- a/resources/views/custom_fields/index.blade.php +++ b/resources/views/custom_fields/index.blade.php @@ -198,7 +198,7 @@ - + {{ trans('admin/custom_fields/general.display_audit') }} From 2518e60a5e0229e49bff648f133bb3d297bc05ad Mon Sep 17 00:00:00 2001 From: snipe Date: Tue, 29 Apr 2025 22:59:05 +0100 Subject: [PATCH 5/6] Corrected gates Signed-off-by: snipe --- app/Http/Transformers/AssetsTransformer.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app/Http/Transformers/AssetsTransformer.php b/app/Http/Transformers/AssetsTransformer.php index a4f4900a3..3f1e4ac8c 100644 --- a/app/Http/Transformers/AssetsTransformer.php +++ b/app/Http/Transformers/AssetsTransformer.php @@ -150,13 +150,13 @@ class AssetsTransformer } $permissions_array['available_actions'] = [ - 'checkout' => ($asset->deleted_at=='' && Gate::allows('checkout', $asset)) ? true : false, - 'checkin' => ($asset->deleted_at=='' && Gate::allows('checkin', $asset)) ? true : false, + 'checkout' => ($asset->deleted_at=='' && Gate::allows('checkout', Asset::class)) ? true : false, + 'checkin' => ($asset->deleted_at=='' && Gate::allows('checkin', Asset::class)) ? true : false, 'clone' => Gate::allows('create', Asset::class) ? true : false, - 'restore' => ($asset->deleted_at!='' && Gate::allows('create', $asset)) ? true : false, - 'update' => ($asset->deleted_at=='' && Gate::allows('update', $asset)) ? true : false, - 'audit' => Gate::allows('audit', $asset) ? true : false, - 'delete' => ($asset->deleted_at=='' && $asset->assigned_to =='' && Gate::allows('delete', $asset) && ($asset->deleted_at == '')) ? true : false, + 'restore' => ($asset->deleted_at!='' && Gate::allows('create', Asset::class)) ? true : false, + 'update' => ($asset->deleted_at=='' && Gate::allows('update', Asset::class)) ? true : false, + 'audit' => Gate::allows('audit', Asset::class) ? true : false, + 'delete' => ($asset->deleted_at=='' && $asset->assigned_to =='' && Gate::allows('delete', Asset::class) && ($asset->deleted_at == '')) ? true : false, ]; From 7daecdd53f823bb7fb59fbe4f6ef6f1a204aaabd Mon Sep 17 00:00:00 2001 From: snipe Date: Tue, 29 Apr 2025 23:17:03 +0100 Subject: [PATCH 6/6] Bumped version Signed-off-by: snipe --- config/version.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/config/version.php b/config/version.php index e89dc25f9..1eb9cccf1 100644 --- a/config/version.php +++ b/config/version.php @@ -1,10 +1,10 @@ 'v8.1.0', - 'full_app_version' => 'v8.1.0 - build 17855-gd81788345', - 'build_version' => '17855', + 'app_version' => 'v8.1.1', + 'full_app_version' => 'v8.1.1 - build 17874-gc031f0b45', + 'build_version' => '17874', 'prerelease_version' => '', - 'hash_version' => 'gd81788345', - 'full_hash' => 'v8.1.0-657-gd81788345', + 'hash_version' => 'gc031f0b45', + 'full_hash' => 'v8.1.1-14-gc031f0b45', 'branch' => 'develop', ); \ No newline at end of file