diff --git a/app/Http/Controllers/AssetModelsController.php b/app/Http/Controllers/AssetModelsController.php index f77f718f88..0795588776 100755 --- a/app/Http/Controllers/AssetModelsController.php +++ b/app/Http/Controllers/AssetModelsController.php @@ -178,28 +178,16 @@ class AssetModelsController extends Controller * @since [v1.0] * @param int $modelId */ - public function destroy($modelId) : RedirectResponse + public function destroy(AssetModel $model) : RedirectResponse { $this->authorize('delete', AssetModel::class); - // Check if the model exists - if (is_null($model = AssetModel::find($modelId))) { - return redirect()->route('models.index')->with('error', trans('admin/models/message.does_not_exist')); - } + if ($model->assets()->count() > 0) { // Throw an error that this model is associated with assets return redirect()->route('models.index')->with('error', trans('admin/models/message.assoc_users')); } - if ($model->image) { - try { - Storage::disk('public')->delete('models/'.$model->image); - $model->update(['image' => null]); - } catch (\Exception $e) { - Log::info($e); - } - } - // Delete the model $model->delete(); @@ -270,23 +258,20 @@ class AssetModelsController extends Controller * @since [v1.0] * @param int $modelId */ - public function getClone($modelId = null) : View | RedirectResponse + public function getClone(AssetModel $model) : View | RedirectResponse { $this->authorize('create', AssetModel::class); - // Check if the model exists - if (is_null($model_to_clone = AssetModel::find($modelId))) { - return redirect()->route('models.index')->with('error', trans('admin/models/message.does_not_exist')); - } - $model = clone $model_to_clone; + $cloned_model = clone $model; $model->id = null; + $model->deleted_at = null; // Show the page return view('models/edit') ->with('depreciation_list', Helper::depreciationList()) ->with('item', $model) - ->with('model_id', $model_to_clone->id) - ->with('clone_model', $model_to_clone); + ->with('model_id', $model->id) + ->with('clone_model', $cloned_model); } @@ -305,7 +290,7 @@ class AssetModelsController extends Controller /** - * Returns a view that allows the user to bulk edit model attrbutes + * Returns a view that allows the user to bulk edit model attributes * * @author [A. Gianotto] [] * @since [v1.7] diff --git a/app/Http/Controllers/AssetModelsFilesController.php b/app/Http/Controllers/AssetModelsFilesController.php index 11ede43c64..14b2c1fc0b 100644 --- a/app/Http/Controllers/AssetModelsFilesController.php +++ b/app/Http/Controllers/AssetModelsFilesController.php @@ -58,11 +58,9 @@ class AssetModelsFilesController extends Controller * @param int $fileId * @since [v1.0] */ - public function show($modelId = null, $fileId = null) : StreamedResponse | Response | RedirectResponse | BinaryFileResponse + public function show(AssetModel $model, $fileId = null) : StreamedResponse | Response | RedirectResponse | BinaryFileResponse { - $model = AssetModel::find($modelId); - // the asset is valid - if (isset($model->id)) { + $this->authorize('view', $model); if (! $log = Actionlog::find($fileId)) { @@ -87,12 +85,6 @@ class AssetModelsFilesController extends Controller } return StorageHelper::downloader($file); - } - // Prepare the error message - $error = trans('admin/hardware/message.does_not_exist', ['id' => $fileId]); - - // Redirect to the hardware management page - return redirect()->route('hardware.index')->with('error', $error); } /** @@ -103,29 +95,21 @@ class AssetModelsFilesController extends Controller * @param int $fileId * @since [v1.0] */ - public function destroy($modelId = null, $fileId = null) : RedirectResponse + public function destroy(AssetModel $model, $fileId = null) : RedirectResponse { - $model = AssetModel::find($modelId); - $this->authorize('update', $model); $rel_path = 'private_uploads/assetmodels'; - - // the asset is valid - if (isset($model->id)) { - $this->authorize('update', $model); - $log = Actionlog::find($fileId); - if ($log) { - if (Storage::exists($rel_path.'/'.$log->filename)) { - Storage::delete($rel_path.'/'.$log->filename); - } - $log->delete(); - - return redirect()->back()->withFragment('files')->with('success', trans('admin/hardware/message.deletefile.success')); + $this->authorize('update', $model); + $log = Actionlog::find($fileId); + if ($log) { + if (Storage::exists($rel_path.'/'.$log->filename)) { + Storage::delete($rel_path.'/'.$log->filename); } + $log->delete(); return redirect()->back()->withFragment('files')->with('success', trans('admin/hardware/message.deletefile.success')); } - // Redirect to the hardware management page - return redirect()->route('hardware.index')->with('error', trans('admin/hardware/message.does_not_exist')); + return redirect()->back()->withFragment('files')->with('success', trans('admin/hardware/message.deletefile.success')); + } } diff --git a/app/Http/Controllers/Users/UserFilesController.php b/app/Http/Controllers/Users/UserFilesController.php index cae4074dd5..45bd0c6329 100644 --- a/app/Http/Controllers/Users/UserFilesController.php +++ b/app/Http/Controllers/Users/UserFilesController.php @@ -22,43 +22,34 @@ class UserFilesController extends Controller *@author [A. Gianotto] [] * @since [v1.6] */ - public function store(UploadFileRequest $request, $userId = null) + public function store(UploadFileRequest $request, User $user) { - $user = User::find($userId); - $destinationPath = config('app.private_uploads').'/users'; + $this->authorize('update', $user); + $files = $request->file('file'); - if (isset($user->id)) { - $this->authorize('update', $user); - - $logActions = []; - $files = $request->file('file'); - - if (is_null($files)) { - return redirect()->back()->with('error', trans('admin/users/message.upload.nofiles')); - } - foreach ($files as $file) { - $file_name = $request->handleFile('private_uploads/users/', 'user-'.$user->id, $file); - - //Log the uploaded file to the log - $logAction = new Actionlog(); - $logAction->item_id = $user->id; - $logAction->item_type = User::class; - $logAction->created_by = auth()->id(); - $logAction->note = $request->input('notes'); - $logAction->target_id = null; - $logAction->created_at = date("Y-m-d H:i:s"); - $logAction->filename = $file_name; - $logAction->action_type = 'uploaded'; - - if (! $logAction->save()) { - return JsonResponse::create(['error' => 'Failed validation: '.print_r($logAction->getErrors(), true)], 500); - } - $logActions[] = $logAction; - } - // dd($logActions); - return redirect()->back()->withFragment('files')->with('success', trans('admin/users/message.upload.success')); + if (is_null($files)) { + return redirect()->back()->with('error', trans('admin/users/message.upload.nofiles')); + } + foreach ($files as $file) { + $file_name = $request->handleFile('private_uploads/users/', 'user-'.$user->id, $file); + + //Log the uploaded file to the log + $logAction = new Actionlog(); + $logAction->item_id = $user->id; + $logAction->item_type = User::class; + $logAction->created_by = auth()->id(); + $logAction->note = $request->input('notes'); + $logAction->target_id = null; + $logAction->created_at = date("Y-m-d H:i:s"); + $logAction->filename = $file_name; + $logAction->action_type = 'uploaded'; + + if (! $logAction->save()) { + return JsonResponse::create(['error' => 'Failed validation: '.print_r($logAction->getErrors(), true)], 500); + } + + return redirect()->back()->withFragment('files')->with('success', trans('admin/users/message.upload.success')); } - return redirect()->back()->with('error', trans('admin/users/message.upload.nofiles')); } @@ -110,7 +101,7 @@ class UserFilesController extends Controller * @return mixed * @throws \Illuminate\Auth\Access\AuthorizationException */ - public function show($userId = null, $fileId = null) + public function show(User $user, $fileId = null) { @@ -118,29 +109,21 @@ class UserFilesController extends Controller return redirect()->route('users.show')->with('error', 'Invalid file request'); } - if ($user = User::find($userId)) { - $this->authorize('view', $user); - if ($log = Actionlog::whereNotNull('filename')->where('item_id', $user->id)->find($fileId)) { - $file = 'private_uploads/users/'.$log->filename; + if ($log = Actionlog::whereNotNull('filename')->where('item_id', $user->id)->find($fileId)) { + $file = 'private_uploads/users/'.$log->filename; - try { - return StorageHelper::showOrDownloadFile($file, $log->filename); - } catch (\Exception $e) { - return redirect()->route('users.show', ['user' => $user])->with('error', trans('general.file_not_found')); - } + try { + return StorageHelper::showOrDownloadFile($file, $log->filename); + } catch (\Exception $e) { + return redirect()->route('users.show', ['user' => $user])->with('error', trans('general.file_not_found')); } - - // The log record doesn't exist somehow - return redirect()->route('users.show', ['user' => $user])->with('error', trans('general.log_record_not_found')); - - - return redirect()->back()->with('error', trans('general.file_not_found')); } - // Redirect to the user management page if the user doesn't exist - return redirect()->route('users.index')->with('error', trans('admin/users/message.user_not_found', ['id' => $userId])); + // The log record doesn't exist somehow + return redirect()->route('users.show', ['user' => $user])->with('error', trans('general.log_record_not_found')); + } } diff --git a/app/Providers/BreadcrumbsServiceProvider.php b/app/Providers/BreadcrumbsServiceProvider.php index da44e71426..645a563cbc 100644 --- a/app/Providers/BreadcrumbsServiceProvider.php +++ b/app/Providers/BreadcrumbsServiceProvider.php @@ -49,7 +49,7 @@ class BreadcrumbsServiceProvider extends ServiceProvider Breadcrumbs::for('hardware.index', fn (Trail $trail) => $trail->parent('home', route('home')) ->push(trans('general.assets'), route('hardware.index')) - ->push(request()->status.' Assets', route('hardware.index', ['status' => request()->status])) + ->push(request()->status.' '.trans('general.assets'), route('hardware.index', ['status' => request()->status])) ); } else { @@ -81,10 +81,20 @@ class BreadcrumbsServiceProvider extends ServiceProvider /** * Asset Model Breadcrumbs */ - Breadcrumbs::for('models.index', fn (Trail $trail) => - $trail->parent('hardware.index', route('hardware.index')) - ->push(trans('general.asset_models'), route('models.index')) - ); + + if ((request()->is('models*')) && (request()->status=='deleted')) { + Breadcrumbs::for('models.index', fn (Trail $trail) => + $trail->parent('hardware.index', route('hardware.index')) + ->push(trans('general.asset_models'), route('models.index')) + ->push(trans('general.deleted_models'), route('models.index', ['status' => request()->status])) + ); + } else { + Breadcrumbs::for('models.index', fn (Trail $trail) => + $trail->parent('hardware.index', route('hardware.index')) + ->push(trans('general.asset_models'), route('models.index')) + ); + } + Breadcrumbs::for('models.create', fn (Trail $trail) => $trail->parent('models.index', route('models.index')) @@ -511,10 +521,16 @@ class BreadcrumbsServiceProvider extends ServiceProvider /** * Users Breadcrumbs */ - Breadcrumbs::for('users.index', fn (Trail $trail) => - $trail->parent('home', route('home')) - ->push(trans('general.users'), route('users.index')) - ); + if ((request()->is('users*')) && (request()->status=='deleted')) { + Breadcrumbs::for('users.index', fn(Trail $trail) => $trail->parent('home', route('home')) + ->push(trans('general.users'), route('users.index')) + ->push(trans('general.deleted_users'), route('users.index')) + ); + } else { + Breadcrumbs::for('users.index', fn(Trail $trail) => $trail->parent('home', route('home')) + ->push(trans('general.users'), route('users.index')) + ); + } Breadcrumbs::for('users.create', fn (Trail $trail) => $trail->parent('users.index', route('users.index')) diff --git a/routes/web/models.php b/routes/web/models.php index 37e54995b8..2325846ea6 100644 --- a/routes/web/models.php +++ b/routes/web/models.php @@ -10,33 +10,33 @@ use Illuminate\Support\Facades\Route; Route::group(['prefix' => 'models', 'middleware' => ['auth']], function () { - Route::post('{modelID}/upload', + Route::post('{model}/upload', [AssetModelsFilesController::class, 'store'] - )->name('upload/models'); + )->name('upload/models')->withTrashed(); - Route::get('{modelID}/showfile/{fileId}/{download?}', + Route::get('{model}/showfile/{fileId}/{download?}', [AssetModelsFilesController::class, 'show'] - )->name('show/modelfile'); + )->name('show/modelfile')->withTrashed(); - Route::delete('{modelID}/showfile/{fileId}/delete', + Route::delete('{model}/showfile/{fileId}/delete', [AssetModelsFilesController::class, 'destroy'] - )->name('delete/modelfile'); + )->name('delete/modelfile')->withTrashed(); Route::get( - '{modelId}/clone', + '{model}/clone', [ AssetModelsController::class, 'getClone' ] - )->name('models.clone.create'); + )->name('models.clone.create')->withTrashed(); Route::post( - '{modelId}/clone', + '{model}/clone', [ AssetModelsController::class, 'postCreate' ] - )->name('models.clone.store'); + )->name('models.clone.store')->withTrashed(); Route::get( '{modelId}/view', @@ -92,5 +92,4 @@ Route::group(['prefix' => 'models', 'middleware' => ['auth']], function () { Route::resource('models', AssetModelsController::class, [ 'middleware' => ['auth'], - 'parameters' => ['model' => 'model_id'], -]); +])->withTrashed(); diff --git a/routes/web/users.php b/routes/web/users.php index d3e3c02c95..ced9c379a9 100644 --- a/routes/web/users.php +++ b/routes/web/users.php @@ -33,20 +33,20 @@ Route::group(['prefix' => 'users', 'middleware' => ['auth']], function () { )->name('users.export'); Route::get( - '{userId}/clone', + '{user}/clone', [ Users\UsersController::class, 'getClone' ] - )->name('users.clone.show'); + )->name('users.clone.show')->withTrashed(); Route::post( - '{userId}/clone', + '{user}/clone', [ Users\UsersController::class, 'postCreate' ] - )->name('users.clone.store'); + )->name('users.clone.store')->withTrashed(); Route::post( '{userId}/restore', @@ -65,12 +65,12 @@ Route::group(['prefix' => 'users', 'middleware' => ['auth']], function () { )->name('unsuspend/user'); Route::post( - '{userId}/upload', + '{user}/upload', [ Users\UserFilesController::class, 'store' ] - )->name('upload/user'); + )->name('upload/user')->withTrashed(); Route::delete( '{userId}/deletefile/{fileId}', @@ -81,12 +81,12 @@ Route::group(['prefix' => 'users', 'middleware' => ['auth']], function () { )->name('userfile.destroy'); Route::get( - '{userId}/showfile/{fileId}', + '{user}/showfile/{fileId}', [ Users\UserFilesController::class, 'show' ] - )->name('show/userfile'); + )->name('show/userfile')->withTrashed(); Route::post( '{userId}/password', @@ -145,11 +145,8 @@ Route::group(['prefix' => 'users', 'middleware' => ['auth']], function () { ] )->name('users/bulkeditsave'); - // pulling this out of the resource because I need route model binding in the request - Route::match(['put', 'patch'], '/{user}', [Users\UsersController::class, 'update'])->name('users.update'); }); Route::resource('users', Users\UsersController::class, [ - 'middleware' => ['auth'], - 'except' => ['update'] -]); + 'middleware' => ['auth'] +])->withTrashed();