mirror of
https://github.com/pelican-dev/panel.git
synced 2025-06-09 10:29:00 +02:00
WIP
This commit is contained in:
parent
768a45bbb8
commit
dbad5ae9c7
@ -3,15 +3,12 @@
|
|||||||
namespace App\Filament\Resources\ServerResource\Pages;
|
namespace App\Filament\Resources\ServerResource\Pages;
|
||||||
|
|
||||||
use App\Filament\Resources\ServerResource;
|
use App\Filament\Resources\ServerResource;
|
||||||
use App\Models\Allocation;
|
|
||||||
use App\Models\Egg;
|
use App\Models\Egg;
|
||||||
use App\Models\Node;
|
use App\Models\Node;
|
||||||
use App\Services\Allocations\AssignmentService;
|
|
||||||
use App\Services\Servers\RandomWordService;
|
use App\Services\Servers\RandomWordService;
|
||||||
use App\Services\Servers\ServerCreationService;
|
use App\Services\Servers\ServerCreationService;
|
||||||
use Filament\Forms\Form;
|
use Filament\Forms\Form;
|
||||||
use Filament\Resources\Pages\CreateRecord;
|
use Filament\Resources\Pages\CreateRecord;
|
||||||
use Illuminate\Database\Eloquent\Builder;
|
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use Illuminate\Support\Facades\Validator;
|
use Illuminate\Support\Facades\Validator;
|
||||||
use Closure;
|
use Closure;
|
||||||
@ -23,6 +20,8 @@ class CreateServer extends CreateRecord
|
|||||||
protected static string $resource = ServerResource::class;
|
protected static string $resource = ServerResource::class;
|
||||||
protected static bool $canCreateAnother = false;
|
protected static bool $canCreateAnother = false;
|
||||||
public ?Egg $egg = null;
|
public ?Egg $egg = null;
|
||||||
|
public array $ports = [];
|
||||||
|
public array $eggDefaultPorts = [];
|
||||||
|
|
||||||
public function form(Form $form): Form
|
public function form(Form $form): Form
|
||||||
{
|
{
|
||||||
@ -54,10 +53,26 @@ class CreateServer extends CreateRecord
|
|||||||
|
|
||||||
$variables = $this->egg->variables ?? [];
|
$variables = $this->egg->variables ?? [];
|
||||||
$serverVariables = collect();
|
$serverVariables = collect();
|
||||||
|
$i = 0;
|
||||||
|
$this->ports = [];
|
||||||
foreach ($variables as $variable) {
|
foreach ($variables as $variable) {
|
||||||
$serverVariables->add($variable->toArray());
|
$serverVariables->add($variable->toArray());
|
||||||
|
if (str_contains($variable->rules, 'port')) {
|
||||||
|
$path = 'assignments';
|
||||||
|
$this->eggDefaultPorts[$variable->default_value] = $variable->env_variable;
|
||||||
|
$this->ports[] = (int) $variable->default_value;
|
||||||
|
|
||||||
|
$set("$path.$i", ['port' => $i]);
|
||||||
|
|
||||||
|
// $set("$path.$i", (int) $variable->default_value);
|
||||||
|
// $set("$path.$i.port", (int) $variable->default_value);
|
||||||
|
$i++;
|
||||||
|
// $variables[$serverVariables[$i]['env_variable']] = $serverVariables[$i]['default_value'];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$set('ports', array_keys($this->eggDefaultPorts));
|
||||||
|
|
||||||
$variables = [];
|
$variables = [];
|
||||||
$set($path = 'server_variables', $serverVariables->sortBy(['sort'])->all());
|
$set($path = 'server_variables', $serverVariables->sortBy(['sort'])->all());
|
||||||
for ($i = 0; $i < $serverVariables->count(); $i++) {
|
for ($i = 0; $i < $serverVariables->count(); $i++) {
|
||||||
@ -145,28 +160,25 @@ class CreateServer extends CreateRecord
|
|||||||
|
|
||||||
Forms\Components\Repeater::make('assignments')
|
Forms\Components\Repeater::make('assignments')
|
||||||
->columnSpan(3)
|
->columnSpan(3)
|
||||||
|
->defaultItems(fn () => count($this->eggDefaultPorts))
|
||||||
->label('Port Assignments')
|
->label('Port Assignments')
|
||||||
|
->helperText(fn (Forms\Get $get) => empty($get('ports')) ? 'You must add ports to assign them!' : '')
|
||||||
->live()
|
->live()
|
||||||
->default(function () {
|
|
||||||
$ports = ['SERVER_PORT' => null];
|
|
||||||
|
|
||||||
if (!$this->egg) {
|
|
||||||
return $ports;
|
|
||||||
}
|
|
||||||
|
|
||||||
return $ports;
|
|
||||||
})
|
|
||||||
->addable(false)
|
->addable(false)
|
||||||
->deletable(false)
|
->deletable(false)
|
||||||
|
->reorderable(false)
|
||||||
->simple(
|
->simple(
|
||||||
Forms\Components\Select::make('port')
|
Forms\Components\Select::make('port')
|
||||||
->live()
|
->live()
|
||||||
// ->selectablePlaceholder(false)
|
->disabled(fn (Forms\Get $get) => empty($get('../../ports')) || empty($get('../../assignments')))
|
||||||
// ->disabled(fn (Forms\Get $get) => empty($get('ports')))
|
->prefix(function (Forms\Components\Component $component) {
|
||||||
->prefix('SERVER_PORT')
|
$key = str($component->getStatePath())->beforeLast('.')->afterLast('.')->toString();
|
||||||
// ->email()
|
$defaultPort = array_keys($this->eggDefaultPorts)[$key] ?? null;
|
||||||
|
|
||||||
|
return $this->eggDefaultPorts[$defaultPort] ?? '';
|
||||||
|
})
|
||||||
->disableOptionsWhenSelectedInSiblingRepeaterItems()
|
->disableOptionsWhenSelectedInSiblingRepeaterItems()
|
||||||
->options(fn (Forms\Get $get) => $get('../../ports'))
|
->options(fn (Forms\Get $get) => $this->ports)
|
||||||
->required(),
|
->required(),
|
||||||
),
|
),
|
||||||
|
|
||||||
@ -592,7 +604,7 @@ class CreateServer extends CreateRecord
|
|||||||
->all();
|
->all();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function ports ($state, Forms\Set $set) {
|
public function ports ($state, Forms\Set $set) {
|
||||||
$ports = collect();
|
$ports = collect();
|
||||||
$update = false;
|
$update = false;
|
||||||
foreach ($state as $portEntry) {
|
foreach ($state as $portEntry) {
|
||||||
@ -603,13 +615,9 @@ class CreateServer extends CreateRecord
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Do not add non-numerical ports
|
|
||||||
$update = true;
|
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
$update = true;
|
|
||||||
[$start, $end] = explode('-', $portEntry);
|
[$start, $end] = explode('-', $portEntry);
|
||||||
if (!is_numeric($start) || !is_numeric($end)) {
|
if (!is_numeric($start) || !is_numeric($end)) {
|
||||||
continue;
|
continue;
|
||||||
@ -624,20 +632,12 @@ class CreateServer extends CreateRecord
|
|||||||
|
|
||||||
$uniquePorts = $ports->unique()->values();
|
$uniquePorts = $ports->unique()->values();
|
||||||
if ($ports->count() > $uniquePorts->count()) {
|
if ($ports->count() > $uniquePorts->count()) {
|
||||||
$update = true;
|
|
||||||
$ports = $uniquePorts;
|
$ports = $uniquePorts;
|
||||||
}
|
}
|
||||||
|
|
||||||
$sortedPorts = $ports->sort()->values();
|
|
||||||
if ($sortedPorts->all() !== $ports->all()) {
|
|
||||||
$update = true;
|
|
||||||
$ports = $sortedPorts;
|
|
||||||
}
|
|
||||||
|
|
||||||
$ports = $ports->filter(fn ($port) => $port > 1024 && $port < 65535)->values();
|
$ports = $ports->filter(fn ($port) => $port > 1024 && $port < 65535)->values();
|
||||||
|
|
||||||
if ($update) {
|
$set('ports', $ports->all());
|
||||||
$set('ports', $ports->all());
|
$this->ports = $ports->all();
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user