Tinkering with routes for breadcrumbs

Signed-off-by: snipe <snipe@snipe.net>
This commit is contained in:
snipe 2025-02-19 00:37:09 +00:00
parent 4d25e8f7f0
commit 972bd1ef83
9 changed files with 166 additions and 32 deletions

View file

@ -244,16 +244,11 @@ class AssetsController extends Controller
* @since [v1.0] * @since [v1.0]
* @return \Illuminate\Contracts\View\View * @return \Illuminate\Contracts\View\View
*/ */
public function edit($assetId = null) : View | RedirectResponse public function edit(Asset $asset) : View | RedirectResponse
{ {
if (! $item = Asset::find($assetId)) { $this->authorize($asset);
// Redirect to the asset management page with error
return redirect()->route('hardware.index')->with('error', trans('admin/hardware/message.does_not_exist'));
}
//Handles company checks and permissions.
$this->authorize($item);
return view('hardware/edit', compact('item')) return view('hardware/edit', compact('asset'))
->with('statuslabel_list', Helper::statusLabelList()) ->with('statuslabel_list', Helper::statusLabelList())
->with('statuslabel_types', Helper::statusTypeList()); ->with('statuslabel_types', Helper::statusTypeList());
} }
@ -267,15 +262,14 @@ class AssetsController extends Controller
* @since [v1.0] * @since [v1.0]
* @return \Illuminate\Contracts\View\View * @return \Illuminate\Contracts\View\View
*/ */
public function show($assetId = null) : View | RedirectResponse public function show(Asset $asset) : View | RedirectResponse
{ {
$asset = Asset::withTrashed()->find($assetId);
$this->authorize('view', $asset); $this->authorize('view', $asset);
$settings = Setting::getSettings(); $settings = Setting::getSettings();
if (isset($asset)) { if (isset($asset)) {
$audit_log = Actionlog::where('action_type', '=', 'audit') $audit_log = Actionlog::where('action_type', '=', 'audit')
->where('item_id', '=', $assetId) ->where('item_id', '=', $asset->id)
->where('item_type', '=', Asset::class) ->where('item_type', '=', Asset::class)
->orderBy('created_at', 'DESC')->first(); ->orderBy('created_at', 'DESC')->first();
@ -291,7 +285,7 @@ class AssetsController extends Controller
$qr_code = (object) [ $qr_code = (object) [
'display' => $settings->qr_code == '1', 'display' => $settings->qr_code == '1',
'url' => route('qr_code/hardware', $asset->id), //'url' => route('qr_code/hardware', ['asset' => $asset]),
]; ];
return view('hardware/view', compact('asset', 'qr_code', 'settings')) return view('hardware/view', compact('asset', 'qr_code', 'settings'))
@ -531,12 +525,12 @@ class AssetsController extends Controller
* @param int $assetId * @param int $assetId
* @since [v1.0] * @since [v1.0]
*/ */
public function getQrCode($assetId = null) : Response | BinaryFileResponse | string | bool public function getQrCode(Asset $asset) : Response | BinaryFileResponse | string | bool
{ {
$settings = Setting::getSettings(); $settings = Setting::getSettings();
if (($settings->qr_code == '1') && ($settings->label2_2d_type !== 'none')) { if (($settings->qr_code == '1') && ($settings->label2_2d_type !== 'none')) {
$asset = Asset::withTrashed()->find($assetId);
if ($asset) { if ($asset) {
$size = Helper::barcodeDimensions($settings->label2_2d_type); $size = Helper::barcodeDimensions($settings->label2_2d_type);
$qr_file = public_path().'/uploads/barcodes/qr-'.str_slug($asset->asset_tag).'-'.str_slug($asset->id).'.png'; $qr_file = public_path().'/uploads/barcodes/qr-'.str_slug($asset->asset_tag).'-'.str_slug($asset->id).'.png';

View file

@ -0,0 +1,37 @@
<?php namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Tabuna\Breadcrumbs\Breadcrumbs;
use App\Models\Asset;
use Tabuna\Breadcrumbs\Trail;
class BreadcrumbsServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Breadcrumbs::for('home', fn (Trail $trail) =>
$trail->push('Home', route('home'))
);
Breadcrumbs::for('hardware.index', fn (Trail $trail) =>
$trail->parent('home', route('home'))
->push(trans('general.assets'), route('hardware.index'))
);
Breadcrumbs::for('hardware.create', fn (Trail $trail) =>
$trail->parent('hardware.index', route('hardware.index'))
->push(trans('general.create'), route('home'))
);
Breadcrumbs::for('hardware.show', fn (Trail $trail, Asset $asset) =>
$trail->parent('hardware.index', route('hardware.index'))
->push($asset->asset_tag, route('home'))
);
}
}

View file

@ -66,6 +66,7 @@
"rollbar/rollbar-laravel": "^8.0", "rollbar/rollbar-laravel": "^8.0",
"spatie/laravel-backup": "^8.8", "spatie/laravel-backup": "^8.8",
"spatie/laravel-ignition": "^2.0", "spatie/laravel-ignition": "^2.0",
"tabuna/breadcrumbs": "^4.2",
"tecnickcom/tc-lib-barcode": "^1.15", "tecnickcom/tc-lib-barcode": "^1.15",
"tecnickcom/tcpdf": "^6.5", "tecnickcom/tcpdf": "^6.5",
"unicodeveloper/laravel-password": "^1.0", "unicodeveloper/laravel-password": "^1.0",

68
composer.lock generated
View file

@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"content-hash": "2a6e7f5e039ee2f40605aefc5c5baf08", "content-hash": "8966b3d72c2db545cd54772d7f049804",
"packages": [ "packages": [
{ {
"name": "alek13/slack", "name": "alek13/slack",
@ -10938,6 +10938,72 @@
], ],
"time": "2024-11-08T15:28:48+00:00" "time": "2024-11-08T15:28:48+00:00"
}, },
{
"name": "tabuna/breadcrumbs",
"version": "4.2.1",
"source": {
"type": "git",
"url": "https://github.com/tabuna/breadcrumbs.git",
"reference": "1d9047306f67e7fcc86fc7e608f1432f247636da"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/tabuna/breadcrumbs/zipball/1d9047306f67e7fcc86fc7e608f1432f247636da",
"reference": "1d9047306f67e7fcc86fc7e608f1432f247636da",
"shasum": ""
},
"require": {
"ext-json": "*",
"laravel/framework": "^10.0|^11.0",
"laravel/serializable-closure": "^1.0|^2.0",
"php": "^8.1"
},
"require-dev": {
"orchestra/testbench": "^8.0|^9.0",
"phpunit/php-code-coverage": "^10.|^11.0",
"phpunit/phpunit": "^10.5|^11.0"
},
"type": "library",
"extra": {
"laravel": {
"aliases": {
"Breadcrumbs": "Tabuna\\Breadcrumbs\\Breadcrumbs"
},
"providers": [
"Tabuna\\Breadcrumbs\\BreadcrumbsServiceProvider"
]
}
},
"autoload": {
"psr-4": {
"Tabuna\\Breadcrumbs\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Alexandr Chernyaev",
"email": "bliz48rus@gmail.com"
},
{
"name": "Dwight Watson",
"email": "dwight@studentservices.com.au"
},
{
"name": "Dave James Miller",
"email": "dave@davejamesmiller.com"
}
],
"description": "An easy way to add breadcrumbs to your Laravel app.",
"support": {
"issues": "https://github.com/tabuna/breadcrumbs/issues",
"source": "https://github.com/tabuna/breadcrumbs/tree/4.2.1"
},
"time": "2024-11-26T12:21:27+00:00"
},
{ {
"name": "tecnickcom/tc-lib-barcode", "name": "tecnickcom/tc-lib-barcode",
"version": "1.18.4", "version": "1.18.4",

View file

@ -316,6 +316,7 @@ return [
App\Providers\LivewireServiceProvider::class, App\Providers\LivewireServiceProvider::class,
App\Providers\MacroServiceProvider::class, App\Providers\MacroServiceProvider::class,
App\Providers\SamlServiceProvider::class, App\Providers\SamlServiceProvider::class,
App\Providers\BreadcrumbsServiceProvider::class,
], ],

View file

@ -181,7 +181,7 @@
@if ($asset->deleted_at=='') @if ($asset->deleted_at=='')
@can('update', $asset) @can('update', $asset)
<div class="col-md-12 hidden-print" style="padding-top: 5px;"> <div class="col-md-12 hidden-print" style="padding-top: 5px;">
<a href="{{ route('hardware.edit', $asset->id) }}" class="btn btn-sm btn-warning btn-social btn-block hidden-print"> <a href="{{ route('hardware.edit', $asset) }}" class="btn btn-sm btn-warning btn-social btn-block hidden-print">
<x-icon type="edit" /> <x-icon type="edit" />
{{ trans('admin/hardware/general.edit') }} {{ trans('admin/hardware/general.edit') }}
</a> </a>

View file

@ -813,7 +813,6 @@ dir="{{ Helper::determineLanguageDirection() }}">
<!-- Content Wrapper. Contains page content --> <!-- Content Wrapper. Contains page content -->
<div class="content-wrapper" role="main" id="setting-list"> <div class="content-wrapper" role="main" id="setting-list">
<barepay></barepay>
@if ($debug_in_production) @if ($debug_in_production)
<div class="row" style="margin-bottom: 0px; background-color: red; color: white; font-size: 15px;"> <div class="row" style="margin-bottom: 0px; background-color: red; color: white; font-size: 15px;">
@ -828,6 +827,37 @@ dir="{{ Helper::determineLanguageDirection() }}">
<!-- Content Header (Page header) --> <!-- Content Header (Page header) -->
<section class="content-header" style="padding-bottom: 30px;"> <section class="content-header" style="padding-bottom: 30px;">
<div class="row">
<div class="col-md-12" style="margin-bottom: 10px;">
<style>
.breadcrumb-item {
display: inline;
list-style: none;
font-size: 110%;
}
</style>
@if(Breadcrumbs::has())
@foreach (Breadcrumbs::current() as $crumbs)
@if ($crumbs->url() && !$loop->last)
<li class="breadcrumb-item">
<a href="{{ $crumbs->url() }}">
{{ $crumbs->title() }}
</a> <i class="fa-solid fa-angle-right"></i>
</li>
@else
<li class="breadcrumb-item active">
{{ $crumbs->title() }}
</li>
@endif
@endforeach
@endif
</div>
</div>
<h1 class="pull-left pagetitle">@yield('title') </h1> <h1 class="pull-left pagetitle">@yield('title') </h1>
@if (isset($helpText)) @if (isset($helpText))

View file

@ -26,6 +26,7 @@ use App\Http\Controllers\Auth\ForgotPasswordController;
use App\Http\Controllers\Auth\ResetPasswordController; use App\Http\Controllers\Auth\ResetPasswordController;
use App\Livewire\Importer; use App\Livewire\Importer;
use Illuminate\Support\Facades\Route; use Illuminate\Support\Facades\Route;
use Tabuna\Breadcrumbs\Trail;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
Route::group(['middleware' => 'auth'], function () { Route::group(['middleware' => 'auth'], function () {
@ -521,14 +522,6 @@ Route::group(['middleware' => 'web'], function () {
Route::get('google/callback', 'App\Http\Controllers\GoogleAuthController@handleGoogleCallback')->name('google.callback'); Route::get('google/callback', 'App\Http\Controllers\GoogleAuthController@handleGoogleCallback')->name('google.callback');
Route::get(
'/',
[
'as' => 'home',
'middleware' => ['auth'],
'uses' => 'DashboardController@getIndex' ]
);
// need to keep GET /logout for SAML SLO // need to keep GET /logout for SAML SLO
Route::get( Route::get(
'logout', 'logout',
@ -554,4 +547,7 @@ Route::withoutMiddleware(['web'])->get(
Route::middleware(['auth'])->get( Route::middleware(['auth'])->get(
'/', '/',
[DashboardController::class, 'index'] [DashboardController::class, 'index']
)->name('home'); )->name('home')
->breadcrumbs(fn (Trail $trail) =>
$trail->push('Home', route('home'))
);

View file

@ -6,6 +6,7 @@ use App\Http\Controllers\Assets\BulkAssetsController;
use App\Http\Controllers\Assets\AssetCheckoutController; use App\Http\Controllers\Assets\AssetCheckoutController;
use App\Http\Controllers\Assets\AssetCheckinController; use App\Http\Controllers\Assets\AssetCheckinController;
use App\Http\Controllers\Assets\AssetFilesController; use App\Http\Controllers\Assets\AssetFilesController;
use Tabuna\Breadcrumbs\Trail;
use Illuminate\Support\Facades\Route; use Illuminate\Support\Facades\Route;
/* /*
@ -26,11 +27,18 @@ Route::group(
Route::get('bulkaudit', Route::get('bulkaudit',
[AssetsController::class, 'quickScan'] [AssetsController::class, 'quickScan']
)->name('assets.bulkaudit'); )
->name('assets.bulkaudit')
->breadcrumbs(fn (Trail $trail) =>
$trail->parent('home')->push(trans('general.assets'), route('hardware.index'))
);
Route::get('quickscancheckin', Route::get('quickscancheckin',
[AssetsController::class, 'quickScanCheckin'] [AssetsController::class, 'quickScanCheckin']
)->name('hardware/quickscancheckin'); )->name('hardware/quickscancheckin')
->breadcrumbs(fn (Trail $trail) =>
$trail->parent('hardware.index')->push('Quickscan Checkin', route('hardware/quickscancheckin'))
);
// Asset Maintenances // Asset Maintenances
Route::resource('maintenances', Route::resource('maintenances',
@ -108,7 +116,7 @@ Route::group(
return redirect()->route('hardware.show', ['hardware' => $assetId]); return redirect()->route('hardware.show', ['hardware' => $assetId]);
}); });
Route::get('{assetId}/qr_code', Route::get('{asset}/qr_code',
[AssetsController::class, 'getQrCode'] [AssetsController::class, 'getQrCode']
)->name('qr_code/hardware'); )->name('qr_code/hardware');
@ -167,10 +175,11 @@ Route::resource('hardware',
AssetsController::class, AssetsController::class,
[ [
'middleware' => ['auth'], 'middleware' => ['auth'],
'parameters' => ['asset' => 'asset_id', 'parameters' => [
'names' => [ 'names' => [
'show' => 'view', 'show' => 'view',
], 'index' => 'index',
],
], ],
]); ]);