From 852f7beb39df59d944d59b106f59c6245cf83b77 Mon Sep 17 00:00:00 2001 From: Boy132 Date: Tue, 4 Nov 2025 12:48:18 +0100 Subject: [PATCH] Allow to register "special file" alert banners (#1861) --- .../Resources/Files/Pages/EditFiles.php | 18 ++++++++----- app/Models/File.php | 27 +++++++++++++++++++ 2 files changed, 38 insertions(+), 7 deletions(-) diff --git a/app/Filament/Server/Resources/Files/Pages/EditFiles.php b/app/Filament/Server/Resources/Files/Pages/EditFiles.php index dd13e10b3..94c77a197 100644 --- a/app/Filament/Server/Resources/Files/Pages/EditFiles.php +++ b/app/Filament/Server/Resources/Files/Pages/EditFiles.php @@ -7,11 +7,13 @@ use App\Exceptions\Repository\FileNotEditableException; use App\Facades\Activity; use App\Filament\Server\Resources\Files\FileResource; use App\Livewire\AlertBanner; +use App\Models\File; use App\Models\Permission; use App\Models\Server; use App\Repositories\Daemon\DaemonFileRepository; use App\Traits\Filament\CanCustomizeHeaderActions; use App\Traits\Filament\CanCustomizeHeaderWidgets; +use Closure; use Filament\Actions\Action; use Filament\Facades\Filament; use Filament\Forms\Components\CodeEditor; @@ -215,13 +217,15 @@ class EditFiles extends Page $this->previousUrl = url()->previous(); - if (str($path)->endsWith('.pelicanignore')) { - AlertBanner::make('.pelicanignore_info') - ->title(trans('server/file.alerts.pelicanignore.title')) - ->body(trans('server/file.alerts.pelicanignore.body')) - ->info() - ->closable() - ->send(); + foreach (File::getSpecialFiles() as $fileName => $data) { + if ($data['check'] instanceof Closure && $data['check']($path)) { + AlertBanner::make($fileName . '_info') + ->title($data['title']) + ->body($data['body']) + ->info() + ->closable() + ->send(); + } } } diff --git a/app/Models/File.php b/app/Models/File.php index 47573f2d9..d04cff702 100644 --- a/app/Models/File.php +++ b/app/Models/File.php @@ -5,6 +5,7 @@ namespace App\Models; use App\Livewire\AlertBanner; use App\Repositories\Daemon\DaemonFileRepository; use Carbon\Carbon; +use Closure; use Exception; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Model; @@ -54,6 +55,32 @@ class File extends Model protected static ?string $searchTerm; + /** @var array> */ + protected static array $customSpecialFiles = []; + + public static function registerSpecialFile(string $fileName, string|Closure $bannerTitle, string|Closure|null $bannerBody = null, ?Closure $nameCheck = null): void + { + static::$customSpecialFiles[$fileName] = [ + 'title' => $bannerTitle, + 'body' => $bannerBody, + 'check' => $nameCheck ?? fn (string $path) => str($path)->endsWith($fileName), + ]; + } + + /** @return array> */ + public static function getSpecialFiles(): array + { + $specialFiles = [ + '.pelicanignore' => [ + 'title' => fn () => trans('server/file.alerts.pelicanignore.title'), + 'body' => fn () => trans('server/file.alerts.pelicanignore.body'), + 'check' => fn (string $path) => str($path)->endsWith('.pelicanignore'), + ], + ]; + + return array_merge($specialFiles, static::$customSpecialFiles); + } + public static function get(Server $server, string $path = '/', ?string $searchTerm = null): Builder { self::$server = $server;