From 636fccbf977f106fbb26a5e4f8c00911ff6311ec Mon Sep 17 00:00:00 2001 From: Marcus Moore Date: Tue, 30 Sep 2025 12:18:51 -0700 Subject: [PATCH 1/3] Add failing test --- .../Feature/Assets/Ui/BulkEditAssetsTest.php | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/tests/Feature/Assets/Ui/BulkEditAssetsTest.php b/tests/Feature/Assets/Ui/BulkEditAssetsTest.php index 36bb9346b0..04880d4f3c 100644 --- a/tests/Feature/Assets/Ui/BulkEditAssetsTest.php +++ b/tests/Feature/Assets/Ui/BulkEditAssetsTest.php @@ -29,6 +29,25 @@ class BulkEditAssetsTest extends TestCase ])->assertStatus(200); } + public function test_handles_model_being_deleted() + { + $this->withoutExceptionHandling(); + + $user = User::factory()->viewAssets()->editAssets()->create(); + $assets = Asset::factory()->count(2)->create(); + + $assets->first()->model->forceDelete(); + + $id_array = $assets->pluck('id')->toArray(); + + $this->actingAs($user)->post('/hardware/bulkedit', [ + 'ids' => $id_array, + 'order' => 'asc', + 'bulk_actions' => 'edit', + 'sort' => 'id' + ])->assertStatus(200); + } + public function test_standard_user_cannot_access_page() { $user = User::factory()->create(); From e15de83a958017e92674730f5eeb49ef1c1539b0 Mon Sep 17 00:00:00 2001 From: Marcus Moore Date: Tue, 30 Sep 2025 12:19:12 -0700 Subject: [PATCH 2/3] Fix attempted access of deleted model --- app/Http/Controllers/Assets/BulkAssetsController.php | 2 +- resources/views/models/custom_fields_form_bulk_edit.blade.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/Assets/BulkAssetsController.php b/app/Http/Controllers/Assets/BulkAssetsController.php index e5446477cf..529888a5eb 100644 --- a/app/Http/Controllers/Assets/BulkAssetsController.php +++ b/app/Http/Controllers/Assets/BulkAssetsController.php @@ -163,7 +163,7 @@ class BulkAssetsController extends Controller $modelNames = []; foreach($models as $model) { - $modelNames[] = $model->model->name; + $modelNames[] = $model->model?->name; } if ($request->filled('bulk_actions')) { diff --git a/resources/views/models/custom_fields_form_bulk_edit.blade.php b/resources/views/models/custom_fields_form_bulk_edit.blade.php index d680c6f198..15f1f6ba52 100644 --- a/resources/views/models/custom_fields_form_bulk_edit.blade.php +++ b/resources/views/models/custom_fields_form_bulk_edit.blade.php @@ -5,7 +5,7 @@ @endphp @foreach($models as $model) - @if ($model->fieldset ? $model->fieldset->count() > 0 : false) + @if (($model) && ($model->fieldset ? $model->fieldset->count() > 0 : false)) @php $anyModelHasCustomFields++; @endphp From 3c3acff79b4b6967768512500a9378fe30f994a8 Mon Sep 17 00:00:00 2001 From: Marcus Moore Date: Tue, 30 Sep 2025 12:22:26 -0700 Subject: [PATCH 3/3] Fix more attempted access of deleted model --- app/Http/Controllers/Assets/BulkAssetsController.php | 2 +- app/Observers/AssetObserver.php | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/Http/Controllers/Assets/BulkAssetsController.php b/app/Http/Controllers/Assets/BulkAssetsController.php index 529888a5eb..27f6044d03 100644 --- a/app/Http/Controllers/Assets/BulkAssetsController.php +++ b/app/Http/Controllers/Assets/BulkAssetsController.php @@ -470,7 +470,7 @@ class BulkAssetsController extends Controller */ // Does the model have a fieldset? - if ($asset->model->fieldset) { + if ($asset->model?->fieldset) { foreach ($asset->model->fieldset->fields as $field) { // null custom fields diff --git a/app/Observers/AssetObserver.php b/app/Observers/AssetObserver.php index 6c07a355ff..dda03f2a63 100644 --- a/app/Observers/AssetObserver.php +++ b/app/Observers/AssetObserver.php @@ -175,7 +175,7 @@ class AssetObserver // determine if explicit and set eol_explicit to true if (!is_null($asset->asset_eol_date) && !is_null($asset->purchase_date)) { - if($asset->model->eol > 0) { + if ($asset->model?->eol > 0) { $months = (int) Carbon::parse($asset->asset_eol_date)->diffInMonths($asset->purchase_date, true); if($months != $asset->model->eol) { $asset->eol_explicit = true; @@ -184,7 +184,7 @@ class AssetObserver } elseif (!is_null($asset->asset_eol_date) && is_null($asset->purchase_date)) { $asset->eol_explicit = true; } - if ((!is_null($asset->asset_eol_date)) && (!is_null($asset->purchase_date)) && (is_null($asset->model->eol) || ($asset->model->eol == 0))) { + if ((!is_null($asset->asset_eol_date)) && (!is_null($asset->purchase_date)) && (is_null($asset->model?->eol) || ($asset->model?->eol == 0))) { $asset->eol_explicit = true; }