diff --git a/build/phpstan/cache/nette.configurator/Container_96877e6014.php b/build/phpstan/cache/nette.configurator/Container_96877e6014.php index 97c2c15..c6d4882 100644 --- a/build/phpstan/cache/nette.configurator/Container_96877e6014.php +++ b/build/phpstan/cache/nette.configurator/Container_96877e6014.php @@ -12,7 +12,7 @@ /** @noinspection PhpParamsInspection,PhpMethodMayBeStaticInspection */ -declare(strict_types=1); + class Container_96877e6014 extends _PHPStan_3334735b2\Nette\DI\Container { diff --git a/composer.json b/composer.json index 677eb71..ccd8c2f 100644 --- a/composer.json +++ b/composer.json @@ -1,76 +1,77 @@ { - "name": "rabol/filament-logviewer", - "description": "Logviewer for Filament admin", - "keywords": [ - "rabol", - "laravel", - "filament-logviewer" - ], - "homepage": "https://github.com/rabol/filament-logviewer", - "license": "MIT", - "authors": [ - { - "name": "Steen Rabol", - "email": "steen@rabol.com", - "role": "Developer" - } - ], - "require": { - "php": "^8.1|^8.2", - "filament/filament": "^3.0", - "filament/forms": "^3.0", - "filament/tables": "^3.0", - "spatie/laravel-package-tools": "^1.15.0", - "illuminate/contracts": "^10.0", - "calebporzio/sushi": "^2.3", - "jackiedo/log-reader": "^2.2" - }, - "require-dev": { - "laravel/pint": "^1.0", - "nunomaduro/collision": "^7.9", - "nunomaduro/larastan": "^2.0.1", - "orchestra/testbench": "^8.0", - "pestphp/pest": "^2.0", - "pestphp/pest-plugin-arch": "^2.0", - "pestphp/pest-plugin-laravel": "^2.0", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan-deprecation-rules": "^1.0", - "phpstan/phpstan-phpunit": "^1.0", - "spatie/laravel-ray": "^1.26" - }, - "autoload": { - "psr-4": { - "Rabol\\FilamentLogviewer\\": "src", - "Rabol\\FilamentLogviewer\\Database\\Factories\\": "database/factories" - } - }, - "autoload-dev": { - "psr-4": { - "Rabol\\FilamentLogviewer\\Tests\\": "tests" - } - }, - "scripts": { - "analyse": "vendor/bin/phpstan analyse", - "test": "vendor/bin/pest", - "test-coverage": "vendor/bin/pest coverage" - }, - "config": { - "sort-packages": true, - "allow-plugins": { - "pestphp/pest-plugin": true, - "phpstan/extension-installer": true - } - }, - "extra": { - "laravel": { - "providers": [ - "Rabol\\FilamentLogviewer\\FilamentLogviewerServiceProvider" - ], - "aliases": { - "Skeleton": "Rabol\\FilamentLogviewer\\Facades\\FilamentLogviewer" - } - } - }, - "minimum-stability": "dev", - "prefer-stable": true + "name": "rabol/filament-logviewer", + "description": "Logviewer for Filament admin", + "keywords": [ + "rabol", + "laravel", + "filament-logviewer" + ], + "homepage": "https://github.com/rabol/filament-logviewer", + "license": "MIT", + "authors": [ + { + "name": "Steen Rabol", + "email": "steen@rabol.com", + "role": "Developer" + } + ], + "require": { + "php": "^8.1|^8.2", + "bezhansalleh/filament-shield": "^3.0", + "filament/filament": "^3.0", + "filament/forms": "^3.0", + "filament/tables": "^3.0", + "spatie/laravel-package-tools": "^1.15.0", + "illuminate/contracts": "^10.0", + "calebporzio/sushi": "^2.3", + "jackiedo/log-reader": "^2.2" + }, + "require-dev": { + "laravel/pint": "^1.0", + "nunomaduro/collision": "^7.9", + "nunomaduro/larastan": "^2.0.1", + "orchestra/testbench": "^8.0", + "pestphp/pest": "^2.0", + "pestphp/pest-plugin-arch": "^2.0", + "pestphp/pest-plugin-laravel": "^2.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "spatie/laravel-ray": "^1.26" + }, + "autoload": { + "psr-4": { + "Rabol\\FilamentLogviewer\\": "src", + "Rabol\\FilamentLogviewer\\Database\\Factories\\": "database/factories" + } + }, + "autoload-dev": { + "psr-4": { + "Rabol\\FilamentLogviewer\\Tests\\": "tests" + } + }, + "scripts": { + "analyse": "vendor/bin/phpstan analyse", + "test": "vendor/bin/pest", + "test-coverage": "vendor/bin/pest coverage" + }, + "config": { + "sort-packages": true, + "allow-plugins": { + "pestphp/pest-plugin": true, + "phpstan/extension-installer": true + } + }, + "extra": { + "laravel": { + "providers": [ + "Rabol\\FilamentLogviewer\\FilamentLogviewerServiceProvider" + ], + "aliases": { + "Skeleton": "Rabol\\FilamentLogviewer\\Facades\\FilamentLogviewer" + } + } + }, + "minimum-stability": "dev", + "prefer-stable": true } diff --git a/resources/views/log-viewer-view-details.blade.php b/resources/views/log-viewer-view-details.blade.php index 3e2d389..828ed0d 100644 --- a/resources/views/log-viewer-view-details.blade.php +++ b/resources/views/log-viewer-view-details.blade.php @@ -1,33 +1,35 @@ +@php use Illuminate\Support\Carbon; @endphp -
+
-

+

Details

-
+
-
-
+
+
Date
-
- {{$entry->date}} +
+ {{Carbon::parse($entry->date)->format('M d, Y h:i A')}}
-
-
+
+
Environment
-
+
{{$entry->environment}}
-
-
+
+
Level
-
+
@if($entry->level == 'error') @@ -46,41 +48,41 @@ class="inline-flex items-center px-3 py-0.5 rounded-full text-sm font-medium bg- @endif
-
-
+
+
Context
-
+
{{$entry->context}}
-
-
+
+
Stack trace
-
-
+
+
@if($entry->stack_traces && $entry->stack_traces->count()) @foreach ($entry->stack_traces as $st)
-
+
Caught at
{{$st->caught_at}}
-
+
In
{{$st->in}}
-
+
Line
{{$st->line}}
-
+
content
{{$st->__toString()}}
@@ -92,67 +94,4 @@ class="{{!$loop->last ? 'border-b': ''}} {{$loop->first ? 'border-t': ''}} borde
- - {{--
--}} - - {{--
--}} - {{-- --}} - {{-- --}} - {{-- --}} - {{-- --}} - {{-- --}} - {{-- --}} - {{-- --}} - {{-- --}} - {{-- --}} - {{-- --}} - {{-- --}} - {{-- --}} - {{-- --}} - {{-- --}} - {{-- --}} - {{-- --}} - {{-- --}} - {{-- --}} - {{-- --}} - {{-- --}} - {{-- --}} - - - {{-- @if ($footer)--}} - {{-- --}} - {{-- --}} - {{-- {{ $footer }}--}} - {{-- --}} - {{-- --}} - {{-- @endif--}} - {{--
Date:{{$entry->date}}
Environment:{{$entry->environment}}
Level:{{$entry->level}}
Context:{{$entry->context}}
Stack trace:--}} - {{-- @if($entry->stack_traces && $entry->stack_traces->count())--}} - - {{-- @foreach ($entry->stack_traces as $st)--}} - {{-- --}} - {{-- --}} - {{-- --}} - {{-- --}} - {{-- --}} - {{-- --}} - {{-- --}} - {{-- --}} - {{-- --}} - {{-- --}} - {{-- --}} - {{-- --}} - {{-- --}} - {{-- --}} - {{-- --}} - {{-- --}} - {{-- --}} - {{--
Caught at{{$st->caught_at}}
In{{$st->in}}
Line{{$st->line}}
content--}} - {{-- {{$st->__toString()}}--}} - {{--
--}} - {{-- @endforeach--}} - - {{-- @endif--}} - {{--
--}} - {{--
--}} diff --git a/resources/views/log-viewer-view.blade.php b/resources/views/log-viewer-view.blade.php index 80618b3..abd31d3 100644 --- a/resources/views/log-viewer-view.blade.php +++ b/resources/views/log-viewer-view.blade.php @@ -1,3 +1,4 @@ +@php use Illuminate\Support\Carbon; @endphp
@@ -5,70 +6,77 @@ Log Files - view xx -
+
- - - - - - - - - - +
DateEnvironmentLevelContextActions
+ + + + + + + + + - - @if($logEntries) - @foreach ($logEntries as $logEntry) - - - - + @if($logEntries) + @foreach ($logEntries as $logEntry) + + + + - - - - @endforeach - @endif - + @endif + + + + + @endforeach + @endif + - @if ($footer) - - - {{ $footer }} - - - @endif -
Date + Environment + Level + Context + Actions +
- {{$logEntry->date}} - - {{$logEntry->environment}} - - @if($logEntry->level == 'error') +
+ class="">{{Carbon::parse($logEntry->date)->format('M d, Y h:i A')}} + + {{$logEntry->environment}} + + @if($logEntry->level == 'error') + {{Illuminate\Support\Str::title($logEntry->level)}} - @elseif($logEntry->level == 'debug') - + @elseif($logEntry->level == 'debug') + {{Illuminate\Support\Str::title($logEntry->level)}} - @else - + @else + {{Illuminate\Support\Str::title($logEntry->level)}} - @endif - - {{$logEntry->context}} - - - View details - -
+ {{$logEntry->context}} + + + View details + +
+ @if ($footer) + + + {{ $footer }} + + + @endif +
diff --git a/resources/views/log-viewer.blade.php b/resources/views/log-viewer.blade.php index 2f5fa77..0e9c095 100644 --- a/resources/views/log-viewer.blade.php +++ b/resources/views/log-viewer.blade.php @@ -5,10 +5,10 @@ {{ __('Log Files') }} -
- {{ $this->table }} -
- +
+ {{ $this->table }} +
+
- +
diff --git a/src/FilamentLogviewerServiceProvider.php b/src/FilamentLogviewerServiceProvider.php index d9d4267..467c6c8 100644 --- a/src/FilamentLogviewerServiceProvider.php +++ b/src/FilamentLogviewerServiceProvider.php @@ -50,6 +50,13 @@ public function configurePackage(Package $package): void } } + protected function getCommands(): array + { + return [ + FilamentLogviewerCommand::class, + ]; + } + public function packageBooted(): void { // Asset Registration @@ -66,8 +73,8 @@ public function packageBooted(): void // Icon Registration FilamentIcon::register($this->getIcons()); - $model_class = config('filament-logviewer::filament-logviewer.user_class', '\Rabol\\FilamentLogviewer\\Models\\LogFile::class'); - $policy_class = config('filament-logviewer::filament-logviewer.user_class', 'Rabol\\FilamentLogviewer\\Policies\\LogFilePolicy'); + $model_class = config('filament-logviewer::filament-log-viewer.user_class', '\Rabol\\FilamentLogviewer\\Models\\LogFile::class'); + $policy_class = config('filament-logviewer::filament-log-viewer.user_class', 'Rabol\\FilamentLogviewer\\Policies\\LogFilePolicy'); Gate::policy($model_class, $policy_class); @@ -75,32 +82,25 @@ public function packageBooted(): void Testable::mixin(new TestsFilamentLogviewer()); } - protected function getAssetPackageName(): ?string - { - return 'rabol/filament-logviewer'; - } - /** * @return array */ protected function getAssets(): array { return [ - Css::make('filament-logviewer-styles', __DIR__.'/../resources/css/dist/filament-logviewer.css'), + Css::make('filament-logviewer-styles', __DIR__ . '/../resources/css/dist/filament-logviewer.css'), ]; } - protected function getCommands(): array + protected function getAssetPackageName(): ?string { - return [ - FilamentLogviewerCommand::class, - ]; + return 'rabol/filament-logviewer'; } /** - * @return array + * @return array */ - protected function getIcons(): array + protected function getScriptData(): array { return []; } @@ -108,15 +108,15 @@ protected function getIcons(): array /** * @return array */ - protected function getRoutes(): array + protected function getIcons(): array { return []; } /** - * @return array + * @return array */ - protected function getScriptData(): array + protected function getRoutes(): array { return []; } diff --git a/src/Pages/LogViewerPage.php b/src/Pages/LogViewerPage.php index e5a0e37..ce1f3ce 100644 --- a/src/Pages/LogViewerPage.php +++ b/src/Pages/LogViewerPage.php @@ -3,6 +3,7 @@ namespace Rabol\FilamentLogviewer\Pages; +use BezhanSalleh\FilamentShield\Traits\HasPageShield; use Filament\Pages\Page; use Filament\Tables; use Filament\Tables\Concerns\InteractsWithTable; @@ -15,6 +16,7 @@ class LogViewerPage extends Page implements Tables\Contracts\HasTable { use InteractsWithTable; + use HasPageShield; protected static ?string $navigationIcon = 'heroicon-o-document-text'; @@ -28,7 +30,7 @@ class LogViewerPage extends Page implements Tables\Contracts\HasTable public static function getNavigationGroup(): ?string { - return config('filament-logviewer.navigation_group', null); + return config('filament-log-viewer.navigation_group', null); } public function table(Table $table): Table @@ -49,15 +51,10 @@ public function table(Table $table): Table Tables\Actions\Action::make('delete') ->action(fn(LogFile $record) => $this->deleteLogFile($record)) ->requiresConfirmation() - ->hidden(fn ($record) => ! static::canDelete($record)), + ->hidden(fn($record) => !static::canDelete($record)), ]); } - public static function canDelete(Model $record): bool - { - return Gate::check('delete', $record); - } - public function deleteLogFile(LogFile $record): void { $log = LogReader::filename($record->name); @@ -66,4 +63,9 @@ public function deleteLogFile(LogFile $record): void LogFile::boot(); } + + public static function canDelete(Model $record): bool + { + return Gate::check('delete', $record); + } } diff --git a/src/Pages/LogViewerViewDetailsPage.php b/src/Pages/LogViewerViewDetailsPage.php index bbea983..d5de286 100644 --- a/src/Pages/LogViewerViewDetailsPage.php +++ b/src/Pages/LogViewerViewDetailsPage.php @@ -2,17 +2,17 @@ namespace Rabol\FilamentLogviewer\Pages; +use BezhanSalleh\FilamentShield\Traits\HasPageShield; use Closure; use Filament\Actions\Action; use Filament\Pages\Page; -use Illuminate\Database\Eloquent\Model; -use Illuminate\Support\Facades\Gate; use Illuminate\Support\Facades\Route; use Jackiedo\LogReader\Facades\LogReader; -use Rabol\FilamentLogviewer\Models\LogFile; class LogViewerViewDetailsPage extends Page { + use HasPageShield; + protected static ?string $navigationIcon = 'heroicon-o-document-text'; protected static string $view = 'filament-logviewer::log-viewer-view-details'; diff --git a/src/Pages/LogViewerViewLogPage.php b/src/Pages/LogViewerViewLogPage.php index 849108c..2b7b494 100644 --- a/src/Pages/LogViewerViewLogPage.php +++ b/src/Pages/LogViewerViewLogPage.php @@ -2,17 +2,17 @@ namespace Rabol\FilamentLogviewer\Pages; +use BezhanSalleh\FilamentShield\Traits\HasPageShield; use Closure; use Filament\Actions\Action; use Filament\Pages\Page; -use Illuminate\Database\Eloquent\Model; -use Illuminate\Support\Facades\Gate; use Illuminate\Support\Facades\Route; use Jackiedo\LogReader\Facades\LogReader; -use Rabol\FilamentLogviewer\Models\LogFile; class LogViewerViewLogPage extends Page { + use HasPageShield; + protected static ?string $navigationIcon = 'heroicon-o-document-text'; protected static string $view = 'filament-logviewer::log-viewer-view'; @@ -40,8 +40,8 @@ public function mount(): void $fileName = request()->query('fileName'); $this->log = LogReader::filename($fileName); - $this->logEntries = $this->log->get(); // we need to paginate... - self::$title = 'Log file: '.$fileName; + $this->logEntries = $this->log?->get()?->sortByDesc('date'); // we need to paginate... + self::$title = 'Log file: ' . $fileName; $this->fileName = $fileName; }