diff --git a/app/Http/Controllers/Api/UploadedFilesController.php b/app/Http/Controllers/Api/UploadedFilesController.php index c9be705895..a28b854133 100644 --- a/app/Http/Controllers/Api/UploadedFilesController.php +++ b/app/Http/Controllers/Api/UploadedFilesController.php @@ -51,14 +51,21 @@ class UploadedFilesController extends Controller ]; - $uploads = self::$map_object_type[$object_type]::withTrashed()->find($id)->uploads() - ->with('adminuser'); + if (($request->filled('action_type') && ($request->input('action_type') == 'audit'))) { + $uploads = self::$map_object_type[$object_type]::withTrashed()->find($id)->audits() + ->with('adminuser'); + } else { + $uploads = self::$map_object_type[$object_type]::withTrashed()->find($id)->uploads() + ->with('adminuser'); + } + $offset = ($request->input('offset') > $uploads->count()) ? $uploads->count() : abs($request->input('offset')); $limit = app('api_limit_value'); $order = $request->input('order') === 'asc' ? 'asc' : 'desc'; $sort = in_array($request->input('sort'), $allowed_columns) ? $request->input('sort') : 'created_at'; + // Text search on action_logs fields // We could use the normal Actionlogs text scope, but it's a very heavy query since it's searching across all relations // and we generally won't need that here diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php index 266769ffb2..e9d28a2962 100644 --- a/app/Http/Controllers/Controller.php +++ b/app/Http/Controllers/Controller.php @@ -45,6 +45,7 @@ abstract class Controller extends BaseController 'accessories' => Accessory::class, 'maintenances' => Maintenance::class, 'assets' => Asset::class, + 'audits' => Asset::class, 'components' => Component::class, 'consumables' => Consumable::class, 'hardware' => Asset::class, @@ -58,6 +59,7 @@ abstract class Controller extends BaseController 'accessories' => 'private_uploads/accessories/', 'maintenances' => 'private_uploads/maintenances/', 'assets' => 'private_uploads/assets/', + 'audits' => 'private_uploads/audits/', 'components' => 'private_uploads/components/', 'consumables' => 'private_uploads/consumables/', 'hardware' => 'private_uploads/assets/', @@ -71,6 +73,7 @@ abstract class Controller extends BaseController 'accessories' => 'accessory', 'maintenances' => 'maintenance', 'assets' => 'asset', + 'audits' => 'audit', 'components' => 'component', 'consumables' => 'consumable', 'hardware' => 'asset', diff --git a/app/Http/Transformers/ActionlogsTransformer.php b/app/Http/Transformers/ActionlogsTransformer.php index f03f7404ba..2cf16d0640 100644 --- a/app/Http/Transformers/ActionlogsTransformer.php +++ b/app/Http/Transformers/ActionlogsTransformer.php @@ -149,6 +149,7 @@ class ActionlogsTransformer 'filename' => $actionlog->filename, 'inlineable' => StorageHelper::allowSafeInline($actionlog->uploads_file_path()), 'exists_on_disk' => Storage::exists($actionlog->uploads_file_path()) ? true : false, + 'mediatype' => StorageHelper::getMediaType($actionlog->uploads_file_path()), ] : null, 'item' => ($actionlog->item) ? [ diff --git a/app/Models/Actionlog.php b/app/Models/Actionlog.php index 3d5820f730..cbe47d9300 100755 --- a/app/Models/Actionlog.php +++ b/app/Models/Actionlog.php @@ -466,8 +466,6 @@ class Actionlog extends SnipeModel public function uploads_file_url() { - - if (($this->action_type == 'accepted') || ($this->action_type == 'declined')) { return route('log.storedeula.download', ['filename' => $this->filename]); } @@ -478,6 +476,11 @@ class Actionlog extends SnipeModel $object = 'models'; } + // @todo - remove audit special case when audits have their own file handling route + if ($this->action_type == 'audit') { + $object = 'audits'; + } + return route('ui.files.show', [ 'object_type' => $object, 'id' => $this->item_id, diff --git a/app/Presenters/UploadedFilesPresenter.php b/app/Presenters/UploadedFilesPresenter.php index 83b528d387..7a2d36b070 100644 --- a/app/Presenters/UploadedFilesPresenter.php +++ b/app/Presenters/UploadedFilesPresenter.php @@ -12,7 +12,7 @@ class UploadedFilesPresenter extends Presenter * * @return string */ - public static function dataTableLayout() + public static function dataTableLayout($allow_deletes = true) { $layout = [ @@ -84,7 +84,11 @@ class UploadedFilesPresenter extends Presenter 'title' => trans('general.created_at'), 'visible' => true, 'formatter' => 'dateDisplayFormatter', - ], [ + ], + ]; + + if ($allow_deletes == 'true') { + $layout[] = [ 'field' => 'available_actions', 'searchable' => false, 'sortable' => false, @@ -92,8 +96,8 @@ class UploadedFilesPresenter extends Presenter 'title' => trans('table.actions'), 'visible' => true, 'formatter' => 'deleteUploadFormatter', - ], - ]; + ]; + } return json_encode($layout); } diff --git a/resources/views/blade/filestable.blade.php b/resources/views/blade/filestable.blade.php index c4b105d6bb..d276d89a4c 100644 --- a/resources/views/blade/filestable.blade.php +++ b/resources/views/blade/filestable.blade.php @@ -2,12 +2,14 @@ @props([ 'object', 'object_type' => '', + 'action_type' => null, + 'allow_deletes' => true, ])
| {{ trans('admin/hardware/table.icon') }} | -{{ trans('general.date') }} | -{{ trans('general.created_by') }} | -{{ trans('general.file_name') }} | -{{ trans('general.notes') }} | -{{ trans('general.download') }} | -{{ trans('admin/hardware/table.changed')}} | -{{ trans('admin/settings/general.login_ip') }} | -{{ trans('admin/settings/general.login_user_agent') }} | -{{ trans('general.action_source') }} | -
|---|