mirror of
https://github.com/pelican-dev/panel.git
synced 2025-05-20 06:24:44 +02:00
Features
This commit is contained in:
parent
55fd291dcc
commit
8ee00050c9
@ -2,24 +2,22 @@
|
|||||||
|
|
||||||
namespace App\Extensions\Features;
|
namespace App\Extensions\Features;
|
||||||
|
|
||||||
use App\Models\Egg;
|
|
||||||
use Illuminate\Database\Eloquent\Model;
|
|
||||||
|
|
||||||
class FeatureProvider
|
class FeatureProvider
|
||||||
{
|
{
|
||||||
/** @var FeatureSchemaInterface[] */
|
/** @var FeatureSchemaInterface[] */
|
||||||
private array $providers = [];
|
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[] */
|
return $id ? $this->providers[$id] : $this->providers;
|
||||||
public function getAvailableFeatures(Egg $egg): array
|
|
||||||
{
|
|
||||||
return collect($this->providers)->intersect($egg->features)->all();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function register(FeatureSchemaInterface $provider): void
|
public function register(FeatureSchemaInterface $provider): void
|
||||||
|
@ -6,6 +6,7 @@ use Filament\Actions\Action;
|
|||||||
|
|
||||||
interface FeatureSchemaInterface
|
interface FeatureSchemaInterface
|
||||||
{
|
{
|
||||||
|
/** @return string[] */
|
||||||
public function getListeners(): array;
|
public function getListeners(): array;
|
||||||
|
|
||||||
public function getId(): string;
|
public function getId(): string;
|
||||||
|
@ -16,7 +16,6 @@ use Filament\Forms\Components\Placeholder;
|
|||||||
use Filament\Forms\Components\TextInput;
|
use Filament\Forms\Components\TextInput;
|
||||||
use Filament\Notifications\Notification;
|
use Filament\Notifications\Notification;
|
||||||
use Illuminate\Database\Eloquent\Builder;
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
use Illuminate\Foundation\Application;
|
|
||||||
use Illuminate\Support\Facades\Blade;
|
use Illuminate\Support\Facades\Blade;
|
||||||
use Illuminate\Support\Facades\Validator;
|
use Illuminate\Support\Facades\Validator;
|
||||||
use Illuminate\Support\HtmlString;
|
use Illuminate\Support\HtmlString;
|
||||||
|
@ -6,7 +6,6 @@ use App\Enums\ConsoleWidgetPosition;
|
|||||||
use App\Enums\ContainerStatus;
|
use App\Enums\ContainerStatus;
|
||||||
use App\Exceptions\Http\Server\ServerStateConflictException;
|
use App\Exceptions\Http\Server\ServerStateConflictException;
|
||||||
use App\Extensions\Features\FeatureProvider;
|
use App\Extensions\Features\FeatureProvider;
|
||||||
use App\Extensions\Features\FeatureSchemaInterface;
|
|
||||||
use App\Filament\Server\Widgets\ServerConsole;
|
use App\Filament\Server\Widgets\ServerConsole;
|
||||||
use App\Filament\Server\Widgets\ServerCpuChart;
|
use App\Filament\Server\Widgets\ServerCpuChart;
|
||||||
use App\Filament\Server\Widgets\ServerMemoryChart;
|
use App\Filament\Server\Widgets\ServerMemoryChart;
|
||||||
@ -61,7 +60,7 @@ class Console extends Page
|
|||||||
$this->featureProvider = $featureProvider;
|
$this->featureProvider = $featureProvider;
|
||||||
/** @var Server $server */
|
/** @var Server $server */
|
||||||
$server = Filament::getTenant();
|
$server = Filament::getTenant();
|
||||||
foreach ($featureProvider->getAvailableFeatures($server->egg) as $feature) {
|
foreach ($featureProvider->get($server->egg->features) as $feature) {
|
||||||
$this->cacheAction($feature->getAction());
|
$this->cacheAction($feature->getAction());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,12 +2,15 @@
|
|||||||
|
|
||||||
namespace App\Services\Servers;
|
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\Mount;
|
||||||
use App\Models\Server;
|
use App\Models\Server;
|
||||||
|
|
||||||
class ServerConfigurationStructureService
|
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.
|
* Return a configuration array for a specific server when passed a server model.
|
||||||
@ -101,7 +104,7 @@ class ServerConfigurationStructureService
|
|||||||
'egg' => [
|
'egg' => [
|
||||||
'id' => $server->egg->uuid,
|
'id' => $server->egg->uuid,
|
||||||
'file_denylist' => $server->egg->inherit_file_denylist,
|
'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(),
|
$feature->getId() => $feature->getListeners(),
|
||||||
])->all(),
|
])->all(),
|
||||||
],
|
],
|
||||||
|
Loading…
x
Reference in New Issue
Block a user