From 2384cc870aa6144a29163de89ecd2aaf401a72c8 Mon Sep 17 00:00:00 2001 From: Boy132 Date: Tue, 5 Aug 2025 09:07:30 +0200 Subject: [PATCH] add warning when trying to enable multiple themes --- app/Facades/Plugins.php | 1 + app/Filament/Admin/Resources/PluginResource.php | 3 +++ app/Models/Plugin.php | 5 +++++ app/Services/Helpers/PluginService.php | 12 ++++++++++++ 4 files changed, 21 insertions(+) diff --git a/app/Facades/Plugins.php b/app/Facades/Plugins.php index 43f11ca3a..7eb2ad6d5 100644 --- a/app/Facades/Plugins.php +++ b/app/Facades/Plugins.php @@ -20,6 +20,7 @@ use Filament\Panel; * @method static void enablePlugin(string|Plugin $plugin) * @method static void disablePlugin(string|Plugin $plugin) * @method static void updateLoadOrder(array $order) + * @method static bool hasThemePluginEnabled() * * @see \App\Services\Helpers\PluginService */ diff --git a/app/Filament/Admin/Resources/PluginResource.php b/app/Filament/Admin/Resources/PluginResource.php index b76d5bf5e..dcd1be73d 100644 --- a/app/Filament/Admin/Resources/PluginResource.php +++ b/app/Filament/Admin/Resources/PluginResource.php @@ -104,6 +104,9 @@ class PluginResource extends Resource ->icon('tabler-check') ->color('success') ->visible(fn (Plugin $plugin) => $plugin->canEnable()) + ->requiresConfirmation(fn (Plugin $plugin) => $plugin->isTheme() && Plugins::hasThemePluginEnabled()) + ->modalHeading('Theme already enabled') + ->modalDescription('You already have a theme enabled. Enabling multiple themes can result in visual bugs. Do you want to continue?') ->action(function (Plugin $plugin) { Plugins::enablePlugin($plugin); diff --git a/app/Models/Plugin.php b/app/Models/Plugin.php index dfbc830a0..bc3fc99da 100644 --- a/app/Models/Plugin.php +++ b/app/Models/Plugin.php @@ -243,6 +243,11 @@ class Plugin extends Model implements HasPluginSettings return !str($this->panel_version)->startsWith('^'); } + public function isTheme(): bool + { + return $this->category === 'theme'; + } + /** @return null|array */ private function getUpdateData(): ?array { diff --git a/app/Services/Helpers/PluginService.php b/app/Services/Helpers/PluginService.php index 770ca5bd5..411907daf 100644 --- a/app/Services/Helpers/PluginService.php +++ b/app/Services/Helpers/PluginService.php @@ -297,4 +297,16 @@ class PluginService ]); } } + + public function hasThemePluginEnabled(): bool + { + $plugins = Plugin::query()->orderBy('load_order')->get(); + foreach ($plugins as $plugin) { + if ($plugin->isTheme() && $plugin->isEnabled()) { + return true; + } + } + + return false; + } }