diff --git a/app/Extensions/Features/FeatureProvider.php b/app/Extensions/Features/FeatureProvider.php index 0e734ba95..b64b91e19 100644 --- a/app/Extensions/Features/FeatureProvider.php +++ b/app/Extensions/Features/FeatureProvider.php @@ -2,24 +2,22 @@ namespace App\Extensions\Features; -use App\Models\Egg; -use Illuminate\Database\Eloquent\Model; - class FeatureProvider { /** @var FeatureSchemaInterface[] */ private array $providers = []; - /** @return FeatureSchemaInterface[] | FeatureSchemaInterface */ - public function get(?string $id = null): array|FeatureSchemaInterface + /** + * @param string[]|string|null $id + * @return FeatureSchemaInterface[] | FeatureSchemaInterface + */ + public function get(array|string|null $id = null): array|FeatureSchemaInterface { - return $id ? $this->providers[$id] : $this->providers; - } + if (is_array($id)) { + return collect($this->providers)->only($id)->all(); + } - /** @return FeatureSchemaInterface[] */ - public function getAvailableFeatures(Egg $egg): array - { - return collect($this->providers)->intersect($egg->features)->all(); + return $id ? $this->providers[$id] : $this->providers; } public function register(FeatureSchemaInterface $provider): void diff --git a/app/Extensions/Features/FeatureSchemaInterface.php b/app/Extensions/Features/FeatureSchemaInterface.php index 98bfae15a..e0a35ded0 100644 --- a/app/Extensions/Features/FeatureSchemaInterface.php +++ b/app/Extensions/Features/FeatureSchemaInterface.php @@ -6,6 +6,7 @@ use Filament\Actions\Action; interface FeatureSchemaInterface { + /** @return string[] */ public function getListeners(): array; public function getId(): string; diff --git a/app/Extensions/Features/Schemas/GSLTokenSchema.php b/app/Extensions/Features/Schemas/GSLTokenSchema.php index b6dba9ffc..698d3bcdc 100644 --- a/app/Extensions/Features/Schemas/GSLTokenSchema.php +++ b/app/Extensions/Features/Schemas/GSLTokenSchema.php @@ -16,7 +16,6 @@ use Filament\Forms\Components\Placeholder; use Filament\Forms\Components\TextInput; use Filament\Notifications\Notification; use Illuminate\Database\Eloquent\Builder; -use Illuminate\Foundation\Application; use Illuminate\Support\Facades\Blade; use Illuminate\Support\Facades\Validator; use Illuminate\Support\HtmlString; diff --git a/app/Filament/Server/Pages/Console.php b/app/Filament/Server/Pages/Console.php index f5a3bc7da..273fb7e97 100644 --- a/app/Filament/Server/Pages/Console.php +++ b/app/Filament/Server/Pages/Console.php @@ -6,7 +6,6 @@ use App\Enums\ConsoleWidgetPosition; use App\Enums\ContainerStatus; use App\Exceptions\Http\Server\ServerStateConflictException; use App\Extensions\Features\FeatureProvider; -use App\Extensions\Features\FeatureSchemaInterface; use App\Filament\Server\Widgets\ServerConsole; use App\Filament\Server\Widgets\ServerCpuChart; use App\Filament\Server\Widgets\ServerMemoryChart; @@ -61,7 +60,7 @@ class Console extends Page $this->featureProvider = $featureProvider; /** @var Server $server */ $server = Filament::getTenant(); - foreach ($featureProvider->getAvailableFeatures($server->egg) as $feature) { + foreach ($featureProvider->get($server->egg->features) as $feature) { $this->cacheAction($feature->getAction()); } } diff --git a/app/Services/Servers/ServerConfigurationStructureService.php b/app/Services/Servers/ServerConfigurationStructureService.php index b0c8156c3..af3e4eeff 100644 --- a/app/Services/Servers/ServerConfigurationStructureService.php +++ b/app/Services/Servers/ServerConfigurationStructureService.php @@ -2,12 +2,15 @@ namespace App\Services\Servers; +use App\Extensions\Features\FeatureProvider; +use App\Extensions\Features\FeatureSchemaInterface; +use App\Models\Egg; use App\Models\Mount; use App\Models\Server; class ServerConfigurationStructureService { - public function __construct(private EnvironmentService $environment) {} + public function __construct(private EnvironmentService $environment, private FeatureProvider $provider) {} /** * Return a configuration array for a specific server when passed a server model. @@ -101,7 +104,7 @@ class ServerConfigurationStructureService 'egg' => [ 'id' => $server->egg->uuid, 'file_denylist' => $server->egg->inherit_file_denylist, - 'features' => collect($server->egg->features())->mapWithKeys(fn ($feature) => [ + 'features' => collect($this->provider->get($server->egg->features))->mapWithKeys(fn (FeatureSchemaInterface $feature) => [ $feature->getId() => $feature->getListeners(), ])->all(), ],