diff --git a/app/Helpers/Helper.php b/app/Helpers/Helper.php index 2d0fd4fb0c..6166d6668b 100644 --- a/app/Helpers/Helper.php +++ b/app/Helpers/Helper.php @@ -1484,7 +1484,7 @@ class Helper } - static public function getRedirectOption($request, $id, $table, $asset_id = null) + static public function getRedirectOption($request, $id, $table, $item_id = null) { $redirect_option = Session::get('redirect_option'); @@ -1495,6 +1495,16 @@ class Helper switch ($table) { case "Assets": return route('hardware.index'); + case "Users": + return route('users.index'); + case "Licenses": + return route('licenses.index'); + case "Accessories": + return route('accessories.index'); + case "Components": + return route('components.index'); + case "Consumables": + return route('consumables.index'); } } @@ -1502,7 +1512,17 @@ class Helper if ($redirect_option == 'item') { switch ($table) { case "Assets": - return route('hardware.show', $id ?? $asset_id); + return route('hardware.show', $id ?? $item_id); + case "Users": + return route('users.show', $id ?? $item_id); + case "Licenses": + return route('licenses.show', $id ?? $item_id); + case "Accessories": + return route('accessories.show', $id ?? $item_id); + case "Components": + return route('components.show', $id ?? $item_id); + case "Consumables": + return route('consumables.show', $id ?? $item_id); } } diff --git a/app/Http/Controllers/Accessories/AccessoriesController.php b/app/Http/Controllers/Accessories/AccessoriesController.php index bb2e74899b..722638ad8f 100755 --- a/app/Http/Controllers/Accessories/AccessoriesController.php +++ b/app/Http/Controllers/Accessories/AccessoriesController.php @@ -79,10 +79,11 @@ class AccessoriesController extends Controller $accessory = $request->handleImages($accessory); + session()->put(['redirect_option' => $request->get('redirect_option')]); // Was the accessory created? if ($accessory->save()) { // Redirect to the new accessory page - return redirect()->route('accessories.index')->with('success', trans('admin/accessories/message.create.success')); + return redirect()->to(Helper::getRedirectOption($request, $accessory->id, 'Accessories'))->with('success', trans('admin/accessories/message.create.success')); } return redirect()->back()->withInput()->withErrors($accessory->getErrors()); @@ -176,9 +177,10 @@ class AccessoriesController extends Controller $accessory = $request->handleImages($accessory); - // Was the accessory updated? + session()->put(['redirect_option' => $request->get('redirect_option')]); + if ($accessory->save()) { - return redirect()->route('accessories.index')->with('success', trans('admin/accessories/message.update.success')); + return redirect()->to(Helper::getRedirectOption($request, $accessory->id, 'Accessories'))->with('success', trans('admin/accessories/message.update.success')); } } else { return redirect()->route('accessories.index')->with('error', trans('admin/accessories/message.does_not_exist')); diff --git a/app/Http/Controllers/Components/ComponentsController.php b/app/Http/Controllers/Components/ComponentsController.php index 33ebde6456..57cd0a2b45 100644 --- a/app/Http/Controllers/Components/ComponentsController.php +++ b/app/Http/Controllers/Components/ComponentsController.php @@ -86,8 +86,10 @@ class ComponentsController extends Controller $component = $request->handleImages($component); + session()->put(['redirect_option' => $request->get('redirect_option')]); + if ($component->save()) { - return redirect()->route('components.index')->with('success', trans('admin/components/message.create.success')); + return redirect()->to(Helper::getRedirectOption($request, $component->id, 'Components'))->with('success', trans('admin/components/message.create.success')); } return redirect()->back()->withInput()->withErrors($component->getErrors()); @@ -160,8 +162,10 @@ class ComponentsController extends Controller $component = $request->handleImages($component); + session()->put(['redirect_option' => $request->get('redirect_option')]); + if ($component->save()) { - return redirect()->route('components.index')->with('success', trans('admin/components/message.update.success')); + return redirect()->to(Helper::getRedirectOption($request, $component->id, 'Components'))->with('success', trans('admin/components/message.update.success')); } return redirect()->back()->withInput()->withErrors($component->getErrors()); diff --git a/app/Http/Controllers/Consumables/ConsumablesController.php b/app/Http/Controllers/Consumables/ConsumablesController.php index 883d5849ee..42c0766fe0 100644 --- a/app/Http/Controllers/Consumables/ConsumablesController.php +++ b/app/Http/Controllers/Consumables/ConsumablesController.php @@ -87,8 +87,10 @@ class ConsumablesController extends Controller $consumable = $request->handleImages($consumable); + session()->put(['redirect_option' => $request->get('redirect_option')]); + if ($consumable->save()) { - return redirect()->route('consumables.index')->with('success', trans('admin/consumables/message.create.success')); + return redirect()->to(Helper::getRedirectOption($request, $consumable->id, 'Consumables'))->with('success', trans('admin/consumables/message.create.success')); } return redirect()->back()->withInput()->withErrors($consumable->getErrors()); @@ -160,8 +162,10 @@ class ConsumablesController extends Controller $consumable = $request->handleImages($consumable); + session()->put(['redirect_option' => $request->get('redirect_option')]); + if ($consumable->save()) { - return redirect()->route('consumables.index')->with('success', trans('admin/consumables/message.update.success')); + return redirect()->to(Helper::getRedirectOption($request, $consumable->id, 'Consumables'))->with('success', trans('admin/consumables/message.update.success')); } return redirect()->back()->withInput()->withErrors($consumable->getErrors()); diff --git a/app/Http/Controllers/Licenses/LicensesController.php b/app/Http/Controllers/Licenses/LicensesController.php index 01de4b4d46..7a51344dd0 100755 --- a/app/Http/Controllers/Licenses/LicensesController.php +++ b/app/Http/Controllers/Licenses/LicensesController.php @@ -102,8 +102,10 @@ class LicensesController extends Controller $license->user_id = Auth::id(); $license->min_amt = $request->input('min_amt'); + session()->put(['redirect_option' => $request->get('redirect_option')]); + if ($license->save()) { - return redirect()->route('licenses.index')->with('success', trans('admin/licenses/message.create.success')); + return redirect()->to(Helper::getRedirectOption($request, $license->id, 'Licenses'))->with('success', trans('admin/licenses/message.create.success')); } return redirect()->back()->withInput()->withErrors($license->getErrors()); @@ -180,8 +182,10 @@ class LicensesController extends Controller $license->category_id = $request->input('category_id'); $license->min_amt = $request->input('min_amt'); + session()->put(['redirect_option' => $request->get('redirect_option')]); + if ($license->save()) { - return redirect()->route('licenses.show', ['license' => $licenseId])->with('success', trans('admin/licenses/message.update.success')); + return redirect()->to(Helper::getRedirectOption($request, $license->id, 'Licenses'))->with('success', trans('admin/licenses/message.update.success')); } // If we can't adjust the number of seats, the error is flashed to the session by the event handler in License.php return redirect()->back()->withInput()->withErrors($license->getErrors()); diff --git a/app/Http/Controllers/Users/UsersController.php b/app/Http/Controllers/Users/UsersController.php index 7cff29fe59..1e203e71d5 100755 --- a/app/Http/Controllers/Users/UsersController.php +++ b/app/Http/Controllers/Users/UsersController.php @@ -133,6 +133,8 @@ class UsersController extends Controller // we have to invoke the app(ImageUploadRequest::class)->handleImages($user, 600, 'avatar', 'avatars', 'avatar'); + session()->put(['redirect_option' => $request->get('redirect_option')]); + if ($user->save()) { if ($request->filled('groups')) { $user->groups()->sync($request->input('groups')); @@ -152,7 +154,7 @@ class UsersController extends Controller $user->notify(new WelcomeNotification($data)); } - return redirect()->route('users.index')->with('success', trans('admin/users/message.success.create')); + return redirect()->to(Helper::getRedirectOption($request, $user->id, 'Users'))->with('success', trans('admin/users/message.success.create')); } return redirect()->back()->withInput()->withErrors($user->getErrors()); @@ -309,10 +311,11 @@ class UsersController extends Controller // Handle uploaded avatar app(ImageUploadRequest::class)->handleImages($user, 600, 'avatar', 'avatars', 'avatar'); + session()->put(['redirect_option' => $request->get('redirect_option')]); if ($user->save()) { // Redirect to the user page - return redirect()->route('users.index') + return redirect()->to(Helper::getRedirectOption($request, $user->id, 'Users')) ->with('success', trans('admin/users/message.success.update')); } diff --git a/resources/views/accessories/edit.blade.php b/resources/views/accessories/edit.blade.php index 068fddc266..8e0503400f 100644 --- a/resources/views/accessories/edit.blade.php +++ b/resources/views/accessories/edit.blade.php @@ -4,6 +4,11 @@ 'helpPosition' => 'right', 'helpText' => trans('help.accessories'), 'formAction' => (isset($item->id)) ? route('accessories.update', ['accessory' => $item->id]) : route('accessories.store'), + 'index_route' => 'accessories.index', + 'options' => [ + 'index' => trans('admin/hardware/form.redirect_to_all', ['type' => 'accessories']), + 'item' => trans('admin/hardware/form.redirect_to_type', ['type' => trans('general.accessory')]), + ] ]) {{-- Page content --}} diff --git a/resources/views/components/edit.blade.php b/resources/views/components/edit.blade.php index 5279f03990..ce77b5130d 100644 --- a/resources/views/components/edit.blade.php +++ b/resources/views/components/edit.blade.php @@ -4,6 +4,11 @@ 'helpPosition' => 'right', 'helpText' => trans('help.components'), 'formAction' => (isset($item->id)) ? route('components.update', ['component' => $item->id]) : route('components.store'), + 'index_route' => 'components.index', + 'options' => [ + 'index' => trans('admin/hardware/form.redirect_to_all', ['type' => 'components']), + 'item' => trans('admin/hardware/form.redirect_to_type', ['type' => trans('general.component')]), + ] ]) diff --git a/resources/views/consumables/edit.blade.php b/resources/views/consumables/edit.blade.php index f32e74b196..300a7114d9 100644 --- a/resources/views/consumables/edit.blade.php +++ b/resources/views/consumables/edit.blade.php @@ -4,6 +4,11 @@ 'helpPosition' => 'right', 'helpText' => trans('help.consumables'), 'formAction' => (isset($item->id)) ? route('consumables.update', ['consumable' => $item->id]) : route('consumables.store'), + 'index_route' => 'consumables.index', + 'options' => [ + 'index' => trans('admin/hardware/form.redirect_to_all', ['type' => 'consumables']), + 'item' => trans('admin/hardware/form.redirect_to_type', ['type' => trans('general.consumable')]), + ] ]) {{-- Page content --}} @section('inputFields') diff --git a/resources/views/hardware/edit.blade.php b/resources/views/hardware/edit.blade.php index 7a543e9218..f31326cc4d 100755 --- a/resources/views/hardware/edit.blade.php +++ b/resources/views/hardware/edit.blade.php @@ -3,10 +3,10 @@ 'createText' => trans('admin/hardware/form.create'), 'updateText' => trans('admin/hardware/form.update'), 'topSubmit' => true, - 'index_route' => 'hardware.index', 'helpText' => trans('help.assets'), 'helpPosition' => 'right', 'formAction' => ($item->id) ? route('hardware.update', ['hardware' => $item->id]) : route('hardware.store'), + 'index_route' => 'hardware.index', 'options' => [ 'index' => trans('admin/hardware/form.redirect_to_all', ['type' => 'assets']), 'item' => trans('admin/hardware/form.redirect_to_type', ['type' => trans('general.asset')]), diff --git a/resources/views/licenses/edit.blade.php b/resources/views/licenses/edit.blade.php index 450e4357a4..b8429a2123 100755 --- a/resources/views/licenses/edit.blade.php +++ b/resources/views/licenses/edit.blade.php @@ -3,6 +3,11 @@ 'updateText' => trans('admin/licenses/form.update'), 'topSubmit' => true, 'formAction' => ($item->id) ? route('licenses.update', ['license' => $item->id]) : route('licenses.store'), + 'index_route' => 'licenses.index', + 'options' => [ + 'index' => trans('admin/hardware/form.redirect_to_all', ['type' => 'licenses']), + 'item' => trans('admin/hardware/form.redirect_to_type', ['type' => trans('general.license')]), + ] ]) {{-- Page content --}} diff --git a/resources/views/users/edit.blade.php b/resources/views/users/edit.blade.php index 814c2f28eb..200acb5527 100755 --- a/resources/views/users/edit.blade.php +++ b/resources/views/users/edit.blade.php @@ -596,9 +596,14 @@ - + diff --git a/tests/Unit/Helpers/HelperTest.php b/tests/Unit/Helpers/HelperTest.php index 993fe138dd..2fb1c58e26 100644 --- a/tests/Unit/Helpers/HelperTest.php +++ b/tests/Unit/Helpers/HelperTest.php @@ -31,7 +31,7 @@ class HelperTest extends TestCase public function testGetRedirectOptionMethod() { $test_data = [ - 'Option 2: redirect for user assigned to ' => [ + 'Option target: redirect for user assigned to ' => [ 'request' =>(object) ['assigned_user' => 22], 'id' => 1, 'checkout_to_type' => 'user', @@ -39,7 +39,7 @@ class HelperTest extends TestCase 'table' => 'Assets', 'route' => route('users.show', 22), ], - 'Option 2: redirect location assigned to ' => [ + 'Option target: redirect location assigned to ' => [ 'request' =>(object) ['assigned_location' => 10], 'id' => 2, 'checkout_to_type' => 'location', @@ -47,7 +47,7 @@ class HelperTest extends TestCase 'table' => 'Locations', 'route' => route('locations.show', 10), ], - 'Option 2: redirect back to asset assigned to ' => [ + 'Option target: redirect back to asset assigned to ' => [ 'request' =>(object) ['assigned_asset' => 101], 'id' => 3, 'checkout_to_type' => 'asset', @@ -55,7 +55,7 @@ class HelperTest extends TestCase 'table' => 'Assets', 'route' => route('hardware.show', 101), ], - 'Option 1: redirect back to asset ' => [ + 'Option item: redirect back to asset ' => [ 'request' =>(object) ['assigned_asset' => null], 'id' => 999, 'checkout_to_type' => null, @@ -63,7 +63,7 @@ class HelperTest extends TestCase 'table' => 'Assets', 'route' => route('hardware.show', 999), ], - 'Option 0: redirect back to index ' => [ + 'Option index: redirect back to asset index ' => [ 'request' =>(object) ['assigned_asset' => null], 'id' => null, 'checkout_to_type' => null, @@ -71,6 +71,95 @@ class HelperTest extends TestCase 'table' => 'Assets', 'route' => route('hardware.index'), ], + + 'Option item: redirect back to user ' => [ + 'request' =>(object) ['assigned_asset' => null], + 'id' => 999, + 'checkout_to_type' => null, + 'redirect_option' => 'item', + 'table' => 'Users', + 'route' => route('users.show', 999), + ], + + 'Option index: redirect back to user index ' => [ + 'request' =>(object) ['assigned_asset' => null], + 'id' => null, + 'checkout_to_type' => null, + 'redirect_option' => 'index', + 'table' => 'Users', + 'route' => route('users.index'), + ], + + 'Option item: redirect back to license ' => [ + 'request' =>(object) ['assigned_asset' => null], + 'id' => 999, + 'checkout_to_type' => null, + 'redirect_option' => 'item', + 'table' => 'Licenses', + 'route' => route('licenses.show', 999), + ], + + 'Option index: redirect back to license index ' => [ + 'request' =>(object) ['assigned_asset' => null], + 'id' => null, + 'checkout_to_type' => null, + 'redirect_option' => 'index', + 'table' => 'Licenses', + 'route' => route('licenses.index'), + ], + + 'Option item: redirect back to accessory list ' => [ + 'request' =>(object) ['assigned_asset' => null], + 'id' => 999, + 'checkout_to_type' => null, + 'redirect_option' => 'item', + 'table' => 'Accessories', + 'route' => route('accessories.show', 999), + ], + + 'Option index: redirect back to accessory index ' => [ + 'request' =>(object) ['assigned_asset' => null], + 'id' => null, + 'checkout_to_type' => null, + 'redirect_option' => 'index', + 'table' => 'Accessories', + 'route' => route('accessories.index'), + ], + 'Option item: redirect back to consumable ' => [ + 'request' =>(object) ['assigned_asset' => null], + 'id' => 999, + 'checkout_to_type' => null, + 'redirect_option' => 'item', + 'table' => 'Consumables', + 'route' => route('consumables.show', 999), + ], + + 'Option index: redirect back to consumables index ' => [ + 'request' =>(object) ['assigned_asset' => null], + 'id' => null, + 'checkout_to_type' => null, + 'redirect_option' => 'index', + 'table' => 'Consumables', + 'route' => route('consumables.index'), + ], + + 'Option item: redirect back to component ' => [ + 'request' =>(object) ['assigned_asset' => null], + 'id' => 999, + 'checkout_to_type' => null, + 'redirect_option' => 'item', + 'table' => 'Components', + 'route' => route('components.show', 999), + ], + + 'Option index: redirect back to component index ' => [ + 'request' =>(object) ['assigned_asset' => null], + 'id' => null, + 'checkout_to_type' => null, + 'redirect_option' => 'index', + 'table' => 'Components', + 'route' => route('components.index'), + ], ]; foreach ($test_data as $scenario => $data ) {