- @foreach($files as $logFile)
-
{{ $subFolder }}
+ @endif
+ @foreach($logFiles as $logFile)
+
-
-
{{ str_replace(DIRECTORY_SEPARATOR, ' '.DIRECTORY_SEPARATOR.' ', $logFile->subFolder) }} {{ $logFile->name }}
-
{{ $logFile->sizeFormatted() }}
-
-
-
-
-
-
-
+ @endforeach
@endforeach
diff --git a/routes/web.php b/routes/web.php
index e661e468..6a5e2401 100644
--- a/routes/web.php
+++ b/routes/web.php
@@ -21,7 +21,7 @@
Route::get('file/{fileIdentifier}/download', function (string $fileIdentifier) {
LogViewer::auth();
-
+
$file = LogViewer::getFile($fileIdentifier);
abort_if(is_null($file), 404);
diff --git a/src/Http/Livewire/FileList.php b/src/Http/Livewire/FileList.php
index 99ed9c09..390090fc 100644
--- a/src/Http/Livewire/FileList.php
+++ b/src/Http/Livewire/FileList.php
@@ -5,6 +5,7 @@
use Illuminate\Support\Facades\Gate;
use Livewire\Component;
use Opcodes\LogViewer\Facades\LogViewer;
+use Opcodes\LogViewer\LogFile;
class FileList extends Component
{
@@ -22,7 +23,15 @@ public function mount(string $selectedFileIdentifier = null)
public function render()
{
return view('log-viewer::livewire.file-list', [
- 'files' => LogViewer::getFiles(),
+ 'files' => LogViewer::getFiles()->mapToGroups(function (LogFile $file) {
+ if (config('log-viewer.group_by_subfolder')) {
+ $group = $file->subFolder ?: '_root';
+ } else {
+ $group = '_root';
+ }
+
+ return [$group => $file];
+ })->sortKeys(),
]);
}
diff --git a/src/LogViewerService.php b/src/LogViewerService.php
index 5e281e5d..835c8758 100755
--- a/src/LogViewerService.php
+++ b/src/LogViewerService.php
@@ -6,7 +6,7 @@
use Illuminate\Auth\Access\AuthorizationException;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Gate;
-use Illuminate\Support\Str;
+use Symfony\Component\Finder\Finder;
class LogViewerService
{
@@ -20,19 +20,18 @@ class LogViewerService
protected function getFilePaths(): array
{
- $files = [];
-
- foreach (config('log-viewer.include_files', []) as $pattern) {
- $files = array_merge($files, glob(Str::finish(storage_path('logs'), DIRECTORY_SEPARATOR).$pattern));
- }
-
- foreach (config('log-viewer.exclude_files', []) as $pattern) {
- $files = array_diff($files, glob(Str::finish(storage_path('logs'), DIRECTORY_SEPARATOR).$pattern));
+ $finder = Finder::create()->in(storage_path('logs'))
+ ->files()
+ ->name(config('log-viewer.include_files', []))
+ ->notName(config('log-viewer.exclude_files', []))
+ ->sortByModifiedTime()
+ ->reverseSorting();
+
+ if (! config('log-viewer.include_recursively', false)) {
+ $finder->depth('== 0');
}
- $files = array_reverse($files);
-
- return array_filter($files, 'is_file');
+ return array_keys(iterator_to_array($finder));
}
/**