From db73f80058cf97d664d013c979abf9920704cfa3 Mon Sep 17 00:00:00 2001 From: snipe Date: Fri, 16 Feb 2024 18:57:50 +0000 Subject: [PATCH] Starting off Signed-off-by: snipe --- app/Http/Transformers/AssetsTransformer.php | 1 + .../Transformers/LocationsTransformer.php | 3 +++ app/Http/Transformers/UsersTransformer.php | 1 + app/Presenters/AssetPresenter.php | 3 ++- app/Presenters/LocationPresenter.php | 6 ++++- app/Presenters/UserPresenter.php | 3 ++- resources/views/locations/index.blade.php | 1 + .../views/partials/bootstrap-table.blade.php | 22 +++++++++++++++++-- 8 files changed, 35 insertions(+), 5 deletions(-) diff --git a/app/Http/Transformers/AssetsTransformer.php b/app/Http/Transformers/AssetsTransformer.php index f5d5ae12b5..c91bceac20 100644 --- a/app/Http/Transformers/AssetsTransformer.php +++ b/app/Http/Transformers/AssetsTransformer.php @@ -148,6 +148,7 @@ class AssetsTransformer '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, + 'selectable' => ($asset->deleted_at=='' && $asset->assigned_to =='' && Gate::allows('delete', Asset::class) && ($asset->deleted_at == '')) ? true : false, ]; diff --git a/app/Http/Transformers/LocationsTransformer.php b/app/Http/Transformers/LocationsTransformer.php index 635a90cbc7..b072f9ed40 100644 --- a/app/Http/Transformers/LocationsTransformer.php +++ b/app/Http/Transformers/LocationsTransformer.php @@ -65,6 +65,9 @@ class LocationsTransformer $permissions_array['available_actions'] = [ 'update' => Gate::allows('update', Location::class) ? true : false, 'delete' => $location->isDeletable(), + 'bulk_selectable' => [ + 'delete' => $location->isDeletable()] + , 'clone' => (Gate::allows('create', Location::class) && ($location->deleted_at == '')), ]; diff --git a/app/Http/Transformers/UsersTransformer.php b/app/Http/Transformers/UsersTransformer.php index 0ebaca2692..16224bb216 100644 --- a/app/Http/Transformers/UsersTransformer.php +++ b/app/Http/Transformers/UsersTransformer.php @@ -82,6 +82,7 @@ class UsersTransformer 'delete' => $user->isDeletable(), 'clone' => (Gate::allows('create', User::class) && ($user->deleted_at == '')), 'restore' => (Gate::allows('create', User::class) && ($user->deleted_at != '')), + 'selectable' => $user->isDeletable(), ]; $array += $permissions_array; diff --git a/app/Presenters/AssetPresenter.php b/app/Presenters/AssetPresenter.php index de7c2c7709..eebf92ac72 100644 --- a/app/Presenters/AssetPresenter.php +++ b/app/Presenters/AssetPresenter.php @@ -19,8 +19,9 @@ class AssetPresenter extends Presenter { $layout = [ [ - 'field' => 'checkbox', + 'field' => 'bulk_selectable', 'checkbox' => true, + 'formatter' => 'checkboxEnabledFormatter', ], [ 'field' => 'id', 'searchable' => false, diff --git a/app/Presenters/LocationPresenter.php b/app/Presenters/LocationPresenter.php index 86e82c1220..6a9bc0b568 100644 --- a/app/Presenters/LocationPresenter.php +++ b/app/Presenters/LocationPresenter.php @@ -14,7 +14,11 @@ class LocationPresenter extends Presenter public static function dataTableLayout() { $layout = [ - + [ + 'field' => 'bulk_selectable', + 'checkbox' => true, + 'formatter' => 'checkboxEnabledFormatter', + ], [ 'field' => 'id', 'searchable' => false, diff --git a/app/Presenters/UserPresenter.php b/app/Presenters/UserPresenter.php index f70ddf8af6..dd7e22656b 100644 --- a/app/Presenters/UserPresenter.php +++ b/app/Presenters/UserPresenter.php @@ -22,8 +22,9 @@ class UserPresenter extends Presenter { $layout = [ [ - 'field' => 'checkbox', + 'field' => 'bulk_selectable', 'checkbox' => true, + 'formatter' => 'checkboxEnabledFormatter', ], [ 'field' => 'id', diff --git a/resources/views/locations/index.blade.php b/resources/views/locations/index.blade.php index 4133f1a2f7..0b368babbb 100755 --- a/resources/views/locations/index.blade.php +++ b/resources/views/locations/index.blade.php @@ -23,6 +23,7 @@ function notesFormatter(value) { if (value) { - return value.replace(/(?:\r\n|\r|\n)/g, '
');; + return value.replace(/(?:\r\n|\r|\n)/g, '
'); } } + // Check if checkbox should be selectable + // Selectability is determined by the API field "selectable" which is set at the Presenter/API Transformer + // However since different bulk actions have different requirements, we have to walk through the available_actions object + // to determine whether to disable it + function checkboxEnabledFormatter (value, row) { + + // add some stuff to get the value of the select2 option here? + + if ((row.available_actions) && (row.available_actions.bulk_selectable) && (row.available_actions.bulk_selectable.delete !== true)) { + console.log('value for ID ' + row.id + ' is NOT true:' + row.available_actions.bulk_selectable.delete); + return { + disabled:true, + //checked: false, <-- not sure this will work the way we want? + } + } + console.log('value for ID ' + row.id + ' IS true:' + row.available_actions.bulk_selectable.delete); + } + // We need a special formatter for license seats, since they don't work exactly the same // Checkouts need the license ID, checkins need the specific seat ID function licenseSeatInOutFormatter(value, row) { // The user is allowed to check the license seat out and it's available - if ((row.available_actions.checkout == true) && (row.user_can_checkout == true) && ((!row.asset_id) && (!row.assigned_to))) { + if ((row.available_actions.checkout === true) && (row.user_can_checkout === true) && ((!row.asset_id) && (!row.assigned_to))) { return '{{ trans('general.checkout') }}'; } else { return '{{ trans('general.checkin') }}';