'string', 'name' => 'string', 'author' => 'string', 'version' => 'string', 'description' => 'string', 'url' => 'string', 'namespace' => 'string', 'class' => 'string', 'status' => 'string', 'status_message' => 'string', 'panels' => 'string', 'panel_version' => 'string', 'category' => 'string', ]; } /** * @return array */ public function getRows(): array { $fileSystem = app(Filesystem::class); // @phpstan-ignore-line $plugins = []; $directories = $fileSystem->directories(base_path('plugins/')); foreach ($directories as $directory) { $plugin = $fileSystem->basename($directory); $path = plugin_path($plugin, 'plugin.json'); if (!file_exists($path)) { continue; } $plugins[] = $fileSystem->json($path, JSON_THROW_ON_ERROR); } return $plugins; } protected function sushiShouldCache(): bool { return false; } protected function casts(): array { return [ 'status' => PluginStatus::class, ]; } public function fullClass(): string { return '\\' . $this->namespace . '\\' . $this->class; } public function shouldLoad(string $panelId): bool { return !$this->isDisabled() && $this->isInstalled() && ($this->panels === null || in_array($panelId, explode(',', $this->panels))); } public function isDisabled(): bool { return $this->status === PluginStatus::Disabled; } public function isInstalled(): bool { return $this->status !== PluginStatus::NotInstalled; } public function hasErrored(): bool { return $this->status === PluginStatus::Errored; } public function isCompatible(): bool { if ($this->panel_version === null) { return true; } if (config('app.version') === 'canary') { return false; } return $this->panel_version === config('app.version'); } public function hasSettings(): bool { $class = $this->fullClass(); if (class_exists($class) && method_exists($class, 'get')) { $pluginObject = ($class)::get(); return method_exists($pluginObject, 'getSettingsForm') && method_exists($pluginObject, 'saveSettings'); } return false; } /** * @return Component[] */ public function getSettingsForm(): array { $class = $this->fullClass(); if (class_exists($class) && method_exists($class, 'get')) { $pluginObject = ($class)::get(); if (method_exists($pluginObject, 'getSettingsForm')) { return $pluginObject->getSettingsForm(); } } return []; } /** * @param array $data */ public function saveSettings(array $data): void { $class = $this->fullClass(); if (class_exists($class) && method_exists($class, 'get')) { $pluginObject = ($class)::get(); if (method_exists($pluginObject, 'saveSettings')) { $pluginObject->saveSettings($data); } } } /** * @return string[] */ public function getProviders(): array { $class = $this->fullClass(); if (class_exists($class) && method_exists($class, 'getProviders')) { return ($class)::getProviders(); } return []; } /** * @return string[] */ public function getCommands(): array { $class = $this->fullClass(); if (class_exists($class) && method_exists($class, 'getCommands')) { return ($class)::getCommands(); } return []; } }