diff --git a/app/Models/Plugin.php b/app/Models/Plugin.php index b181373ef..dca7f6d6c 100644 --- a/app/Models/Plugin.php +++ b/app/Models/Plugin.php @@ -5,6 +5,7 @@ namespace App\Models; use App\Contracts\Plugins\HasPluginSettings; use App\Enums\PluginCategory; use App\Enums\PluginStatus; +use App\Facades\Plugins; use Exception; use Filament\Schemas\Components\Component; use Illuminate\Database\Eloquent\Model; @@ -42,6 +43,12 @@ class Plugin extends Model implements HasPluginSettings public $incrementing = false; + protected $fillable = [ + 'status', + 'status_message', + 'load_order', + ]; + /** * @return string[] */ @@ -137,12 +144,16 @@ class Plugin extends Model implements HasPluginSettings $plugins[] = $data; } catch (Exception $exception) { + if (Plugins::isDevModeActive()) { + throw ($exception); + } + report($exception); if (!$exception instanceof JsonException) { $plugins[] = [ 'id' => $data['id'] ?? Str::uuid(), - 'name' => $data['name'] ?? 'Invalid Plugin', + 'name' => $data['name'] ?? $plugin, 'author' => $data['author'] ?? 'Unknown', 'version' => '0.0.0', 'description' => 'Plugin.json is invalid!', @@ -168,7 +179,7 @@ class Plugin extends Model implements HasPluginSettings protected function sushiShouldCache(): bool { - return false; + return !Plugins::isDevModeActive(); } protected function casts(): array @@ -353,13 +364,14 @@ class Plugin extends Model implements HasPluginSettings */ public function saveSettings(array $data): void { - $class = $this->fullClass(); - if (class_exists($class)) { + try { $pluginObject = filament($this->id); if ($pluginObject instanceof HasPluginSettings) { $pluginObject->saveSettings($data); } + } catch (Exception) { + // Plugin is not loaded on the current panel, so no settings } } diff --git a/app/Services/Helpers/PluginService.php b/app/Services/Helpers/PluginService.php index 7cb145aa8..5401ae72c 100644 --- a/app/Services/Helpers/PluginService.php +++ b/app/Services/Helpers/PluginService.php @@ -298,8 +298,7 @@ class PluginService /** @param array $data */ private function setMetaData(string|Plugin $plugin, array $data): void { - $plugin = $plugin instanceof Plugin ? $plugin->id : $plugin; - $path = plugin_path($plugin, 'plugin.json'); + $path = plugin_path($plugin instanceof Plugin ? $plugin->id : $plugin, 'plugin.json'); if (File::exists($path)) { $pluginData = File::json($path, JSON_THROW_ON_ERROR); @@ -307,6 +306,12 @@ class PluginService $pluginData['meta'] = $metaData; File::put($path, json_encode($pluginData, JSON_THROW_ON_ERROR | JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES)); + + if (!$this->isDevModeActive()) { + // Update model to rebuild sushi cache + $plugin = !$plugin instanceof Plugin ? Plugin::findOrFail($plugin) : $plugin; + $plugin->update($metaData); + } } }