Convert variable "rules" to array (#507)

* convert variable "rules" to array

* allow importing eggs with string rules

* fix tests

* update stock eggs to rules array
This commit is contained in:
Boy132 2024-08-19 08:33:53 +02:00 committed by GitHub
parent 0ff429215d
commit c2b1a98d29
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
25 changed files with 408 additions and 118 deletions

View File

@ -134,7 +134,7 @@ class CreateEgg extends CreateRecord
->mutateRelationshipDataBeforeCreateUsing(function (array $data): array { ->mutateRelationshipDataBeforeCreateUsing(function (array $data): array {
$data['default_value'] ??= ''; $data['default_value'] ??= '';
$data['description'] ??= ''; $data['description'] ??= '';
$data['rules'] ??= ''; $data['rules'] ??= [];
$data['user_viewable'] ??= ''; $data['user_viewable'] ??= '';
$data['user_editable'] ??= ''; $data['user_editable'] ??= '';
@ -143,7 +143,7 @@ class CreateEgg extends CreateRecord
->mutateRelationshipDataBeforeSaveUsing(function (array $data): array { ->mutateRelationshipDataBeforeSaveUsing(function (array $data): array {
$data['default_value'] ??= ''; $data['default_value'] ??= '';
$data['description'] ??= ''; $data['description'] ??= '';
$data['rules'] ??= ''; $data['rules'] ??= [];
$data['user_viewable'] ??= ''; $data['user_viewable'] ??= '';
$data['user_editable'] ??= ''; $data['user_editable'] ??= '';
@ -173,7 +173,30 @@ class CreateEgg extends CreateRecord
Checkbox::make('user_viewable')->label('Viewable'), Checkbox::make('user_viewable')->label('Viewable'),
Checkbox::make('user_editable')->label('Editable'), Checkbox::make('user_editable')->label('Editable'),
]), ]),
Textarea::make('rules')->columnSpanFull(), TagsInput::make('rules')
->columnSpanFull()
->placeholder('Add Rule')
->reorderable()
->suggestions([
'required',
'nullable',
'string',
'integer',
'numeric',
'boolean',
'alpha',
'alpha_dash',
'alpha_num',
'url',
'email',
'regex:',
'min:',
'max:',
'between:',
'between:1024,65535',
'in:',
'in:true,false',
]),
]), ]),
]), ]),
Tab::make('Install Script') Tab::make('Install Script')

View File

@ -144,7 +144,7 @@ class EditEgg extends EditRecord
->mutateRelationshipDataBeforeCreateUsing(function (array $data): array { ->mutateRelationshipDataBeforeCreateUsing(function (array $data): array {
$data['default_value'] ??= ''; $data['default_value'] ??= '';
$data['description'] ??= ''; $data['description'] ??= '';
$data['rules'] ??= ''; $data['rules'] ??= [];
$data['user_viewable'] ??= ''; $data['user_viewable'] ??= '';
$data['user_editable'] ??= ''; $data['user_editable'] ??= '';
@ -153,7 +153,7 @@ class EditEgg extends EditRecord
->mutateRelationshipDataBeforeSaveUsing(function (array $data): array { ->mutateRelationshipDataBeforeSaveUsing(function (array $data): array {
$data['default_value'] ??= ''; $data['default_value'] ??= '';
$data['description'] ??= ''; $data['description'] ??= '';
$data['rules'] ??= ''; $data['rules'] ??= [];
$data['user_viewable'] ??= ''; $data['user_viewable'] ??= '';
$data['user_editable'] ??= ''; $data['user_editable'] ??= '';
@ -183,7 +183,30 @@ class EditEgg extends EditRecord
Checkbox::make('user_viewable')->label('Viewable'), Checkbox::make('user_viewable')->label('Viewable'),
Checkbox::make('user_editable')->label('Editable'), Checkbox::make('user_editable')->label('Editable'),
]), ]),
TextInput::make('rules')->columnSpanFull(), TagsInput::make('rules')
->columnSpanFull()
->placeholder('Add Rule')
->reorderable()
->suggestions([
'required',
'nullable',
'string',
'integer',
'numeric',
'boolean',
'alpha',
'alpha_dash',
'alpha_num',
'url',
'email',
'regex:',
'min:',
'max:',
'between:',
'between:1024,65535',
'in:',
'in:true,false',
]),
]), ]),
]), ]),
Tab::make('Install Script') Tab::make('Install Script')

View File

@ -6,6 +6,7 @@ use App\Filament\Resources\ServerResource;
use App\Models\Allocation; use App\Models\Allocation;
use App\Models\Egg; use App\Models\Egg;
use App\Models\Node; use App\Models\Node;
use App\Models\ServerVariable;
use App\Models\User; use App\Models\User;
use App\Services\Allocations\AssignmentService; use App\Services\Allocations\AssignmentService;
use App\Services\Servers\RandomWordService; use App\Services\Servers\RandomWordService;
@ -443,8 +444,7 @@ class CreateServer extends CreateRecord
$text = Forms\Components\TextInput::make('variable_value') $text = Forms\Components\TextInput::make('variable_value')
->hidden($this->shouldHideComponent(...)) ->hidden($this->shouldHideComponent(...))
->maxLength(255) ->required(fn (ServerVariable $serverVariable) => $serverVariable->variable->getRequiredAttribute())
->required(fn (Forms\Get $get) => in_array('required', explode('|', $get('rules'))))
->rules( ->rules(
fn (Forms\Get $get): Closure => function (string $attribute, $value, Closure $fail) use ($get) { fn (Forms\Get $get): Closure => function (string $attribute, $value, Closure $fail) use ($get) {
$validator = Validator::make(['validatorkey' => $value], [ $validator = Validator::make(['validatorkey' => $value], [
@ -806,11 +806,9 @@ class CreateServer extends CreateRecord
return $service->handle($data); return $service->handle($data);
} }
private function shouldHideComponent(Forms\Get $get, Forms\Components\Component $component): bool private function shouldHideComponent(ServerVariable $serverVariable, Forms\Components\Component $component): bool
{ {
$containsRuleIn = str($get('rules'))->explode('|')->reduce( $containsRuleIn = array_first($serverVariable->variable->rules, fn ($value) => str($value)->startsWith('in:'), false);
fn ($result, $value) => $result === true && !str($value)->startsWith('in:'), true
);
if ($component instanceof Forms\Components\Select) { if ($component instanceof Forms\Components\Select) {
return $containsRuleIn; return $containsRuleIn;
@ -823,11 +821,9 @@ class CreateServer extends CreateRecord
throw new \Exception('Component type not supported: ' . $component::class); throw new \Exception('Component type not supported: ' . $component::class);
} }
private function getSelectOptionsFromRules(Forms\Get $get): array private function getSelectOptionsFromRules(ServerVariable $serverVariable): array
{ {
$inRule = str($get('rules'))->explode('|')->reduce( $inRule = array_first($serverVariable->variable->rules, fn ($value) => str($value)->startsWith('in:'));
fn ($result, $value) => str($value)->startsWith('in:') ? $value : $result, ''
);
return str($inRule) return str($inRule)
->after('in:') ->after('in:')

View File

@ -489,7 +489,7 @@ class EditServer extends EditRecord
$text = Forms\Components\TextInput::make('variable_value') $text = Forms\Components\TextInput::make('variable_value')
->hidden($this->shouldHideComponent(...)) ->hidden($this->shouldHideComponent(...))
->required(fn (ServerVariable $serverVariable) => in_array('required', explode('|', $serverVariable->variable->rules))) ->required(fn (ServerVariable $serverVariable) => $serverVariable->variable->getRequiredAttribute())
->rules([ ->rules([
fn (ServerVariable $serverVariable): Closure => function (string $attribute, $value, Closure $fail) use ($serverVariable) { fn (ServerVariable $serverVariable): Closure => function (string $attribute, $value, Closure $fail) use ($serverVariable) {
$validator = Validator::make(['validatorkey' => $value], [ $validator = Validator::make(['validatorkey' => $value], [
@ -516,7 +516,7 @@ class EditServer extends EditRecord
->live(onBlur: true) ->live(onBlur: true)
->hintIcon('tabler-code') ->hintIcon('tabler-code')
->label(fn (ServerVariable $serverVariable) => $serverVariable->variable->name) ->label(fn (ServerVariable $serverVariable) => $serverVariable->variable->name)
->hintIconTooltip(fn (ServerVariable $serverVariable) => $serverVariable->variable->rules) ->hintIconTooltip(fn (ServerVariable $serverVariable) => implode('|', $serverVariable->variable->rules))
->prefix(fn (ServerVariable $serverVariable) => '{{' . $serverVariable->variable->env_variable . '}}') ->prefix(fn (ServerVariable $serverVariable) => '{{' . $serverVariable->variable->env_variable . '}}')
->helperText(fn (ServerVariable $serverVariable) => empty($serverVariable->variable->description) ? '—' : $serverVariable->variable->description); ->helperText(fn (ServerVariable $serverVariable) => empty($serverVariable->variable->description) ? '—' : $serverVariable->variable->description);
} }
@ -757,28 +757,24 @@ class EditServer extends EditRecord
]; ];
} }
private function shouldHideComponent(Forms\Get $get, Forms\Components\Component $component): bool private function shouldHideComponent(ServerVariable $serverVariable, Forms\Components\Component $component): bool
{ {
$containsRuleIn = str($get('rules'))->explode('|')->reduce( $containsRuleIn = array_first($serverVariable->variable->rules, fn ($value) => str($value)->startsWith('in:'), false);
fn ($result, $value) => $result === true && !str($value)->startsWith('in:'), true
);
if ($component instanceof Forms\Components\Select) { if ($component instanceof Forms\Components\Select) {
return $containsRuleIn; return !$containsRuleIn;
} }
if ($component instanceof Forms\Components\TextInput) { if ($component instanceof Forms\Components\TextInput) {
return !$containsRuleIn; return $containsRuleIn;
} }
throw new \Exception('Component type not supported: ' . $component::class); throw new \Exception('Component type not supported: ' . $component::class);
} }
private function getSelectOptionsFromRules(Forms\Get $get): array private function getSelectOptionsFromRules(ServerVariable $serverVariable): array
{ {
$inRule = str($get('rules'))->explode('|')->reduce( $inRule = array_first($serverVariable->variable->rules, fn ($value) => str($value)->startsWith('in:'));
fn ($result, $value) => str($value)->startsWith('in:') ? $value : $result, ''
);
return str($inRule) return str($inRule)
->after('in:') ->after('in:')

View File

@ -15,7 +15,7 @@ use Illuminate\Database\Eloquent\Relations\HasMany;
* @property string $default_value * @property string $default_value
* @property bool $user_viewable * @property bool $user_viewable
* @property bool $user_editable * @property bool $user_editable
* @property string $rules * @property array $rules
* @property \Carbon\CarbonImmutable $created_at * @property \Carbon\CarbonImmutable $created_at
* @property \Carbon\CarbonImmutable $updated_at * @property \Carbon\CarbonImmutable $updated_at
* @property bool $required * @property bool $required
@ -58,12 +58,14 @@ class EggVariable extends Model
'default_value' => 'string', 'default_value' => 'string',
'user_viewable' => 'boolean', 'user_viewable' => 'boolean',
'user_editable' => 'boolean', 'user_editable' => 'boolean',
'rules' => 'string', 'rules' => 'array',
'rules.*' => 'string',
]; ];
protected $attributes = [ protected $attributes = [
'user_editable' => 0, 'user_editable' => 0,
'user_viewable' => 0, 'user_viewable' => 0,
'rules' => '[]',
]; ];
protected function casts(): array protected function casts(): array
@ -72,6 +74,7 @@ class EggVariable extends Model
'egg_id' => 'integer', 'egg_id' => 'integer',
'user_viewable' => 'bool', 'user_viewable' => 'bool',
'user_editable' => 'bool', 'user_editable' => 'bool',
'rules' => 'array',
'created_at' => 'immutable_datetime', 'created_at' => 'immutable_datetime',
'updated_at' => 'immutable_datetime', 'updated_at' => 'immutable_datetime',
]; ];
@ -79,7 +82,7 @@ class EggVariable extends Model
public function getRequiredAttribute(): bool public function getRequiredAttribute(): bool
{ {
return in_array('required', explode('|', $this->rules)); return in_array('required', $this->rules);
} }
public function egg(): HasOne public function egg(): HasOne

View File

@ -54,6 +54,8 @@ class EggImporterService
// Update existing variables or create new ones. // Update existing variables or create new ones.
foreach ($parsed['variables'] ?? [] as $variable) { foreach ($parsed['variables'] ?? [] as $variable) {
EggVariable::unguarded(function () use ($egg, $variable) { EggVariable::unguarded(function () use ($egg, $variable) {
$variable['rules'] = is_array($variable['rules']) ? $variable['rules'] : explode('|', $variable['rules']);
$egg->variables()->updateOrCreate([ $egg->variables()->updateOrCreate([
'env_variable' => $variable['env_variable'], 'env_variable' => $variable['env_variable'],
], Collection::make($variable)->except(['egg_id', 'env_variable'])->toArray()); ], Collection::make($variable)->except(['egg_id', 'env_variable'])->toArray());

View File

@ -40,7 +40,7 @@ class VariableCreationService
throw new ReservedVariableNameException(sprintf('Cannot use the protected name %s for this environment variable.', array_get($data, 'env_variable'))); throw new ReservedVariableNameException(sprintf('Cannot use the protected name %s for this environment variable.', array_get($data, 'env_variable')));
} }
if (!empty($data['rules'] ?? '')) { if (!empty($data['rules'] ?? [])) {
$this->validateRules($data['rules']); $this->validateRules($data['rules']);
} }
@ -55,7 +55,7 @@ class VariableCreationService
'default_value' => $data['default_value'] ?? '', 'default_value' => $data['default_value'] ?? '',
'user_viewable' => in_array('user_viewable', $options), 'user_viewable' => in_array('user_viewable', $options),
'user_editable' => in_array('user_editable', $options), 'user_editable' => in_array('user_editable', $options),
'rules' => $data['rules'] ?? '', 'rules' => $data['rules'] ?? [],
]); ]);
return $eggVariable; return $eggVariable;

View File

@ -2,7 +2,6 @@
namespace App\Services\Eggs\Variables; namespace App\Services\Eggs\Variables;
use Illuminate\Support\Str;
use App\Models\EggVariable; use App\Models\EggVariable;
use App\Exceptions\DisplayException; use App\Exceptions\DisplayException;
use App\Traits\Services\ValidatesValidationRules; use App\Traits\Services\ValidatesValidationRules;
@ -54,12 +53,8 @@ class VariableUpdateService
} }
} }
if (!empty($data['rules'] ?? '')) { if (!empty($data['rules'] ?? [])) {
$this->validateRules( $this->validateRules($data['rules']);
(is_string($data['rules']) && Str::contains($data['rules'], ';;'))
? explode(';;', $data['rules'])
: $data['rules']
);
} }
$options = array_get($data, 'options') ?? []; $options = array_get($data, 'options') ?? [];
@ -71,7 +66,7 @@ class VariableUpdateService
'default_value' => $data['default_value'] ?? '', 'default_value' => $data['default_value'] ?? '',
'user_viewable' => in_array('user_viewable', $options), 'user_viewable' => in_array('user_viewable', $options),
'user_editable' => in_array('user_editable', $options), 'user_editable' => in_array('user_editable', $options),
'rules' => $data['rules'] ?? '', 'rules' => $data['rules'] ?? [],
]); ]);
} }
} }

View File

@ -27,7 +27,7 @@ class EggVariableTransformer extends BaseClientTransformer
'default_value' => $variable->default_value, 'default_value' => $variable->default_value,
'server_value' => $variable->server_value, 'server_value' => $variable->server_value,
'is_editable' => $variable->user_editable, 'is_editable' => $variable->user_editable,
'rules' => $variable->rules, 'rules' => implode('|', $variable->rules),
]; ];
} }
} }

View File

@ -4,7 +4,7 @@
"version": "PTDL_v2", "version": "PTDL_v2",
"update_url": "https:\/\/github.com\/pelican-dev\/panel\/raw\/main\/database\/Seeders\/eggs\/minecraft\/egg-bungeecord.json" "update_url": "https:\/\/github.com\/pelican-dev\/panel\/raw\/main\/database\/Seeders\/eggs\/minecraft\/egg-bungeecord.json"
}, },
"exported_at": "2024-07-03T14:33:51+00:00", "exported_at": "2024-07-25T12:03:12+00:00",
"name": "Bungeecord", "name": "Bungeecord",
"author": "panel@example.com", "author": "panel@example.com",
"uuid": "9e6b409e-4028-4947-aea8-50a2c404c271", "uuid": "9e6b409e-4028-4947-aea8-50a2c404c271",
@ -44,7 +44,11 @@
"default_value": "latest", "default_value": "latest",
"user_viewable": true, "user_viewable": true,
"user_editable": true, "user_editable": true,
"rules": "required|alpha_num|between:1,6", "rules": [
"required",
"alpha_num",
"between:1,6"
],
"sort": null, "sort": null,
"field_type": "text" "field_type": "text"
}, },
@ -55,7 +59,10 @@
"default_value": "bungeecord.jar", "default_value": "bungeecord.jar",
"user_viewable": true, "user_viewable": true,
"user_editable": true, "user_editable": true,
"rules": "required|regex:\/^([\\w\\d._-]+)(\\.jar)$\/", "rules": [
"required",
"regex:\/^([\\w\\d._-]+)(\\.jar)$\/"
],
"sort": null, "sort": null,
"field_type": "text" "field_type": "text"
} }

View File

@ -4,7 +4,7 @@
"version": "PTDL_v2", "version": "PTDL_v2",
"update_url": "https:\/\/github.com\/pelican-dev\/panel\/raw\/main\/database\/Seeders\/eggs\/minecraft\/egg-forge-minecraft.json" "update_url": "https:\/\/github.com\/pelican-dev\/panel\/raw\/main\/database\/Seeders\/eggs\/minecraft\/egg-forge-minecraft.json"
}, },
"exported_at": "2024-07-03T14:33:51+00:00", "exported_at": "2024-07-25T12:03:19+00:00",
"name": "Forge Minecraft", "name": "Forge Minecraft",
"author": "panel@example.com", "author": "panel@example.com",
"uuid": "ed072427-f209-4603-875c-f540c6dd5a65", "uuid": "ed072427-f209-4603-875c-f540c6dd5a65",
@ -44,7 +44,10 @@
"default_value": "server.jar", "default_value": "server.jar",
"user_viewable": true, "user_viewable": true,
"user_editable": true, "user_editable": true,
"rules": "required|regex:\/^([\\w\\d._-]+)(\\.jar)$\/", "rules": [
"required",
"regex:\/^([\\w\\d._-]+)(\\.jar)$\/"
],
"sort": 1, "sort": 1,
"field_type": "text" "field_type": "text"
}, },
@ -55,7 +58,11 @@
"default_value": "latest", "default_value": "latest",
"user_viewable": true, "user_viewable": true,
"user_editable": true, "user_editable": true,
"rules": "required|string|max:9", "rules": [
"required",
"string",
"max:9"
],
"sort": 2, "sort": 2,
"field_type": "text" "field_type": "text"
}, },
@ -66,7 +73,11 @@
"default_value": "recommended", "default_value": "recommended",
"user_viewable": true, "user_viewable": true,
"user_editable": true, "user_editable": true,
"rules": "required|string|in:recommended,latest", "rules": [
"required",
"string",
"in:recommended,latest"
],
"sort": 3, "sort": 3,
"field_type": "text" "field_type": "text"
}, },
@ -77,7 +88,10 @@
"default_value": "", "default_value": "",
"user_viewable": true, "user_viewable": true,
"user_editable": true, "user_editable": true,
"rules": "nullable|regex:\/^[0-9\\.\\-]+$\/", "rules": [
"nullable",
"regex:\/^[0-9\\.\\-]+$\/"
],
"sort": 4, "sort": 4,
"field_type": "text" "field_type": "text"
} }

View File

@ -4,7 +4,7 @@
"version": "PTDL_v2", "version": "PTDL_v2",
"update_url": "https:\/\/github.com\/pelican-dev\/panel\/raw\/main\/database\/Seeders\/eggs\/minecraft\/egg-paper.json" "update_url": "https:\/\/github.com\/pelican-dev\/panel\/raw\/main\/database\/Seeders\/eggs\/minecraft\/egg-paper.json"
}, },
"exported_at": "2024-07-03T14:33:52+00:00", "exported_at": "2024-07-25T12:03:43+00:00",
"name": "Paper", "name": "Paper",
"author": "parker@example.com", "author": "parker@example.com",
"uuid": "5da37ef6-58da-4169-90a6-e683e1721247", "uuid": "5da37ef6-58da-4169-90a6-e683e1721247",
@ -44,7 +44,11 @@
"default_value": "latest", "default_value": "latest",
"user_viewable": true, "user_viewable": true,
"user_editable": true, "user_editable": true,
"rules": "nullable|string|max:20", "rules": [
"nullable",
"string",
"max:20"
],
"sort": 1, "sort": 1,
"field_type": "text" "field_type": "text"
}, },
@ -55,7 +59,10 @@
"default_value": "server.jar", "default_value": "server.jar",
"user_viewable": true, "user_viewable": true,
"user_editable": true, "user_editable": true,
"rules": "required|regex:\/^([\\w\\d._-]+)(\\.jar)$\/", "rules": [
"required",
"regex:\/^([\\w\\d._-]+)(\\.jar)$\/"
],
"sort": 2, "sort": 2,
"field_type": "text" "field_type": "text"
}, },
@ -66,7 +73,10 @@
"default_value": "", "default_value": "",
"user_viewable": false, "user_viewable": false,
"user_editable": false, "user_editable": false,
"rules": "nullable|string", "rules": [
"nullable",
"string"
],
"sort": 3, "sort": 3,
"field_type": "text" "field_type": "text"
}, },
@ -77,7 +87,11 @@
"default_value": "latest", "default_value": "latest",
"user_viewable": true, "user_viewable": true,
"user_editable": true, "user_editable": true,
"rules": "required|string|max:20", "rules": [
"required",
"string",
"max:20"
],
"sort": 4, "sort": 4,
"field_type": "text" "field_type": "text"
} }

View File

@ -4,7 +4,7 @@
"version": "PTDL_v2", "version": "PTDL_v2",
"update_url": "https:\/\/github.com\/pelican-dev\/panel\/raw\/main\/database\/Seeders\/eggs\/minecraft\/egg-sponge--sponge-vanilla.json" "update_url": "https:\/\/github.com\/pelican-dev\/panel\/raw\/main\/database\/Seeders\/eggs\/minecraft\/egg-sponge--sponge-vanilla.json"
}, },
"exported_at": "2024-07-03T14:34:02+00:00", "exported_at": "2024-07-25T12:03:55+00:00",
"name": "Sponge (SpongeVanilla)", "name": "Sponge (SpongeVanilla)",
"author": "panel@example.com", "author": "panel@example.com",
"uuid": "f0d2f88f-1ff3-42a0-b03f-ac44c5571e6d", "uuid": "f0d2f88f-1ff3-42a0-b03f-ac44c5571e6d",
@ -44,7 +44,10 @@
"default_value": "1.12.2-7.3.0", "default_value": "1.12.2-7.3.0",
"user_viewable": true, "user_viewable": true,
"user_editable": true, "user_editable": true,
"rules": "required|regex:\/^([a-zA-Z0-9.\\-_]+)$\/", "rules": [
"required",
"regex:\/^([a-zA-Z0-9.\\-_]+)$\/"
],
"sort": 1, "sort": 1,
"field_type": "text" "field_type": "text"
}, },
@ -55,7 +58,10 @@
"default_value": "server.jar", "default_value": "server.jar",
"user_viewable": true, "user_viewable": true,
"user_editable": true, "user_editable": true,
"rules": "required|regex:\/^([\\w\\d._-]+)(\\.jar)$\/", "rules": [
"required",
"regex:\/^([\\w\\d._-]+)(\\.jar)$\/"
],
"sort": 2, "sort": 2,
"field_type": "text" "field_type": "text"
} }

View File

@ -4,7 +4,7 @@
"version": "PTDL_v2", "version": "PTDL_v2",
"update_url": "https:\/\/github.com\/pelican-dev\/panel\/raw\/main\/database\/Seeders\/eggs\/minecraft\/egg-vanilla-minecraft.json" "update_url": "https:\/\/github.com\/pelican-dev\/panel\/raw\/main\/database\/Seeders\/eggs\/minecraft\/egg-vanilla-minecraft.json"
}, },
"exported_at": "2024-07-03T14:34:02+00:00", "exported_at": "2024-07-25T12:04:05+00:00",
"name": "Vanilla Minecraft", "name": "Vanilla Minecraft",
"author": "panel@example.com", "author": "panel@example.com",
"uuid": "9ac39f3d-0c34-4d93-8174-c52ab9e6c57b", "uuid": "9ac39f3d-0c34-4d93-8174-c52ab9e6c57b",
@ -44,7 +44,10 @@
"default_value": "server.jar", "default_value": "server.jar",
"user_viewable": true, "user_viewable": true,
"user_editable": true, "user_editable": true,
"rules": "required|regex:\/^([\\w\\d._-]+)(\\.jar)$\/", "rules": [
"required",
"regex:\/^([\\w\\d._-]+)(\\.jar)$\/"
],
"sort": 1, "sort": 1,
"field_type": "text" "field_type": "text"
}, },
@ -55,7 +58,11 @@
"default_value": "latest", "default_value": "latest",
"user_viewable": true, "user_viewable": true,
"user_editable": true, "user_editable": true,
"rules": "required|string|between:3,15", "rules": [
"required",
"string",
"between:3,15"
],
"sort": 2, "sort": 2,
"field_type": "text" "field_type": "text"
} }

View File

@ -4,7 +4,7 @@
"version": "PTDL_v2", "version": "PTDL_v2",
"update_url": "https:\/\/github.com\/pelican-dev\/panel\/raw\/main\/database\/Seeders\/eggs\/rust\/egg-rust.json" "update_url": "https:\/\/github.com\/pelican-dev\/panel\/raw\/main\/database\/Seeders\/eggs\/rust\/egg-rust.json"
}, },
"exported_at": "2024-07-03T14:34:09+00:00", "exported_at": "2024-07-25T12:06:17+00:00",
"name": "Rust", "name": "Rust",
"author": "panel@example.com", "author": "panel@example.com",
"uuid": "bace2dfb-209c-452a-9459-7d6f340b07ae", "uuid": "bace2dfb-209c-452a-9459-7d6f340b07ae",
@ -38,7 +38,11 @@
"default_value": "A Rust Server", "default_value": "A Rust Server",
"user_viewable": true, "user_viewable": true,
"user_editable": true, "user_editable": true,
"rules": "required|string|max:60", "rules": [
"required",
"string",
"max:60"
],
"sort": 1, "sort": 1,
"field_type": "text" "field_type": "text"
}, },
@ -49,7 +53,10 @@
"default_value": "vanilla", "default_value": "vanilla",
"user_viewable": true, "user_viewable": true,
"user_editable": true, "user_editable": true,
"rules": "required|in:vanilla,oxide,carbon", "rules": [
"required",
"in:vanilla,oxide,carbon"
],
"sort": 2, "sort": 2,
"field_type": "text" "field_type": "text"
}, },
@ -60,7 +67,11 @@
"default_value": "Procedural Map", "default_value": "Procedural Map",
"user_viewable": true, "user_viewable": true,
"user_editable": true, "user_editable": true,
"rules": "required|string|max:20", "rules": [
"required",
"string",
"max:20"
],
"sort": 3, "sort": 3,
"field_type": "text" "field_type": "text"
}, },
@ -71,7 +82,10 @@
"default_value": "Powered by Panel", "default_value": "Powered by Panel",
"user_viewable": true, "user_viewable": true,
"user_editable": true, "user_editable": true,
"rules": "required|string", "rules": [
"required",
"string"
],
"sort": 4, "sort": 4,
"field_type": "text" "field_type": "text"
}, },
@ -82,7 +96,10 @@
"default_value": "http:\/\/example.com", "default_value": "http:\/\/example.com",
"user_viewable": true, "user_viewable": true,
"user_editable": true, "user_editable": true,
"rules": "nullable|url", "rules": [
"nullable",
"url"
],
"sort": 5, "sort": 5,
"field_type": "text" "field_type": "text"
}, },
@ -93,7 +110,10 @@
"default_value": "3000", "default_value": "3000",
"user_viewable": true, "user_viewable": true,
"user_editable": true, "user_editable": true,
"rules": "required|integer", "rules": [
"required",
"integer"
],
"sort": 6, "sort": 6,
"field_type": "text" "field_type": "text"
}, },
@ -104,7 +124,10 @@
"default_value": "", "default_value": "",
"user_viewable": true, "user_viewable": true,
"user_editable": true, "user_editable": true,
"rules": "nullable|string", "rules": [
"nullable",
"string"
],
"sort": 7, "sort": 7,
"field_type": "text" "field_type": "text"
}, },
@ -115,7 +138,10 @@
"default_value": "40", "default_value": "40",
"user_viewable": true, "user_viewable": true,
"user_editable": true, "user_editable": true,
"rules": "required|integer", "rules": [
"required",
"integer"
],
"sort": 8, "sort": 8,
"field_type": "text" "field_type": "text"
}, },
@ -126,7 +152,10 @@
"default_value": "", "default_value": "",
"user_viewable": true, "user_viewable": true,
"user_editable": true, "user_editable": true,
"rules": "nullable|url", "rules": [
"nullable",
"url"
],
"sort": 9, "sort": 9,
"field_type": "text" "field_type": "text"
}, },
@ -137,7 +166,10 @@
"default_value": "27017", "default_value": "27017",
"user_viewable": true, "user_viewable": true,
"user_editable": false, "user_editable": false,
"rules": "required|integer", "rules": [
"required",
"integer"
],
"sort": 10, "sort": 10,
"field_type": "text" "field_type": "text"
}, },
@ -148,7 +180,10 @@
"default_value": "28016", "default_value": "28016",
"user_viewable": true, "user_viewable": true,
"user_editable": false, "user_editable": false,
"rules": "required|integer", "rules": [
"required",
"integer"
],
"sort": 11, "sort": 11,
"field_type": "text" "field_type": "text"
}, },
@ -159,7 +194,11 @@
"default_value": "", "default_value": "",
"user_viewable": true, "user_viewable": true,
"user_editable": true, "user_editable": true,
"rules": "required|regex:\/^[\\w.-]*$\/|max:64", "rules": [
"required",
"regex:\/^[\\w.-]*$\/",
"max:64"
],
"sort": 12, "sort": 12,
"field_type": "text" "field_type": "text"
}, },
@ -170,7 +209,10 @@
"default_value": "60", "default_value": "60",
"user_viewable": true, "user_viewable": true,
"user_editable": true, "user_editable": true,
"rules": "required|integer", "rules": [
"required",
"integer"
],
"sort": 13, "sort": 13,
"field_type": "text" "field_type": "text"
}, },
@ -181,7 +223,10 @@
"default_value": "", "default_value": "",
"user_viewable": true, "user_viewable": true,
"user_editable": true, "user_editable": true,
"rules": "nullable|string", "rules": [
"nullable",
"string"
],
"sort": 14, "sort": 14,
"field_type": "text" "field_type": "text"
}, },
@ -192,7 +237,10 @@
"default_value": "28082", "default_value": "28082",
"user_viewable": true, "user_viewable": true,
"user_editable": false, "user_editable": false,
"rules": "required|integer", "rules": [
"required",
"integer"
],
"sort": 15, "sort": 15,
"field_type": "text" "field_type": "text"
}, },
@ -203,7 +251,10 @@
"default_value": "", "default_value": "",
"user_viewable": true, "user_viewable": true,
"user_editable": true, "user_editable": true,
"rules": "nullable|url", "rules": [
"nullable",
"url"
],
"sort": 16, "sort": 16,
"field_type": "text" "field_type": "text"
}, },
@ -214,7 +265,10 @@
"default_value": "", "default_value": "",
"user_viewable": true, "user_viewable": true,
"user_editable": true, "user_editable": true,
"rules": "nullable|url", "rules": [
"nullable",
"url"
],
"sort": 17, "sort": 17,
"field_type": "text" "field_type": "text"
}, },
@ -225,7 +279,11 @@
"default_value": "258550", "default_value": "258550",
"user_viewable": false, "user_viewable": false,
"user_editable": false, "user_editable": false,
"rules": "required|string|in:258550", "rules": [
"required",
"string",
"in:258550"
],
"sort": 18, "sort": 18,
"field_type": "text" "field_type": "text"
} }

View File

@ -4,7 +4,7 @@
"version": "PTDL_v2", "version": "PTDL_v2",
"update_url": "https:\/\/github.com\/pelican-dev\/panel\/raw\/main\/database\/Seeders\/eggs\/source-engine\/egg-counter--strike--global-offensive.json" "update_url": "https:\/\/github.com\/pelican-dev\/panel\/raw\/main\/database\/Seeders\/eggs\/source-engine\/egg-counter--strike--global-offensive.json"
}, },
"exported_at": "2024-07-03T14:34:03+00:00", "exported_at": "2024-07-25T12:04:25+00:00",
"name": "Counter-Strike: Global Offensive", "name": "Counter-Strike: Global Offensive",
"author": "panel@example.com", "author": "panel@example.com",
"uuid": "437c367d-06be-498f-a604-fdad135504d7", "uuid": "437c367d-06be-498f-a604-fdad135504d7",
@ -39,7 +39,11 @@
"default_value": "de_dust2", "default_value": "de_dust2",
"user_viewable": true, "user_viewable": true,
"user_editable": true, "user_editable": true,
"rules": "required|string|alpha_dash", "rules": [
"required",
"string",
"alpha_dash"
],
"sort": 1, "sort": 1,
"field_type": "text" "field_type": "text"
}, },
@ -50,7 +54,12 @@
"default_value": "", "default_value": "",
"user_viewable": true, "user_viewable": true,
"user_editable": true, "user_editable": true,
"rules": "required|string|alpha_num|size:32", "rules": [
"required",
"string",
"alpha_num",
"size:32"
],
"sort": 2, "sort": 2,
"field_type": "text" "field_type": "text"
}, },
@ -61,7 +70,11 @@
"default_value": "740", "default_value": "740",
"user_viewable": false, "user_viewable": false,
"user_editable": false, "user_editable": false,
"rules": "required|string|max:20", "rules": [
"required",
"string",
"max:20"
],
"sort": 3, "sort": 3,
"field_type": "text" "field_type": "text"
} }

View File

@ -4,7 +4,7 @@
"version": "PTDL_v2", "version": "PTDL_v2",
"update_url": "https:\/\/github.com\/pelican-dev\/panel\/raw\/main\/database\/Seeders\/eggs\/source-engine\/egg-custom-source-engine-game.json" "update_url": "https:\/\/github.com\/pelican-dev\/panel\/raw\/main\/database\/Seeders\/eggs\/source-engine\/egg-custom-source-engine-game.json"
}, },
"exported_at": "2024-07-03T14:34:04+00:00", "exported_at": "2024-07-25T12:03:27+00:00",
"name": "Custom Source Engine Game", "name": "Custom Source Engine Game",
"author": "panel@example.com", "author": "panel@example.com",
"uuid": "2a42d0c2-c0ba-4067-9a0a-9b95d77a3490", "uuid": "2a42d0c2-c0ba-4067-9a0a-9b95d77a3490",
@ -38,7 +38,11 @@
"default_value": "", "default_value": "",
"user_viewable": true, "user_viewable": true,
"user_editable": false, "user_editable": false,
"rules": "required|numeric|digits_between:1,6", "rules": [
"required",
"numeric",
"digits_between:1,6"
],
"sort": 1, "sort": 1,
"field_type": "text" "field_type": "text"
}, },
@ -49,7 +53,11 @@
"default_value": "", "default_value": "",
"user_viewable": true, "user_viewable": true,
"user_editable": false, "user_editable": false,
"rules": "required|alpha_dash|between:1,100", "rules": [
"required",
"alpha_dash",
"between:1,100"
],
"sort": 2, "sort": 2,
"field_type": "text" "field_type": "text"
}, },
@ -60,7 +68,11 @@
"default_value": "", "default_value": "",
"user_viewable": true, "user_viewable": true,
"user_editable": true, "user_editable": true,
"rules": "required|string|alpha_dash", "rules": [
"required",
"string",
"alpha_dash"
],
"sort": 3, "sort": 3,
"field_type": "text" "field_type": "text"
}, },
@ -71,7 +83,10 @@
"default_value": "", "default_value": "",
"user_viewable": true, "user_viewable": true,
"user_editable": true, "user_editable": true,
"rules": "nullable|string", "rules": [
"nullable",
"string"
],
"sort": 4, "sort": 4,
"field_type": "text" "field_type": "text"
}, },
@ -82,7 +97,10 @@
"default_value": "", "default_value": "",
"user_viewable": true, "user_viewable": true,
"user_editable": true, "user_editable": true,
"rules": "nullable|string", "rules": [
"nullable",
"string"
],
"sort": 5, "sort": 5,
"field_type": "text" "field_type": "text"
}, },
@ -93,7 +111,10 @@
"default_value": "", "default_value": "",
"user_viewable": true, "user_viewable": true,
"user_editable": true, "user_editable": true,
"rules": "nullable|string", "rules": [
"nullable",
"string"
],
"sort": 6, "sort": 6,
"field_type": "text" "field_type": "text"
} }

View File

@ -4,7 +4,7 @@
"version": "PTDL_v2", "version": "PTDL_v2",
"update_url": "https:\/\/github.com\/pelican-dev\/panel\/raw\/main\/database\/Seeders\/eggs\/source-engine\/egg-garrys-mod.json" "update_url": "https:\/\/github.com\/pelican-dev\/panel\/raw\/main\/database\/Seeders\/eggs\/source-engine\/egg-garrys-mod.json"
}, },
"exported_at": "2024-07-03T14:34:04+00:00", "exported_at": "2024-07-25T12:05:02+00:00",
"name": "Garrys Mod", "name": "Garrys Mod",
"author": "panel@example.com", "author": "panel@example.com",
"uuid": "60ef81d4-30a2-4d98-ab64-f59c69e2f915", "uuid": "60ef81d4-30a2-4d98-ab64-f59c69e2f915",
@ -39,7 +39,11 @@
"default_value": "gm_flatgrass", "default_value": "gm_flatgrass",
"user_viewable": true, "user_viewable": true,
"user_editable": true, "user_editable": true,
"rules": "required|string|alpha_dash", "rules": [
"required",
"string",
"alpha_dash"
],
"sort": 1, "sort": 1,
"field_type": "text" "field_type": "text"
}, },
@ -50,7 +54,12 @@
"default_value": "", "default_value": "",
"user_viewable": true, "user_viewable": true,
"user_editable": true, "user_editable": true,
"rules": "nullable|string|alpha_num|size:32", "rules": [
"nullable",
"string",
"alpha_num",
"size:32"
],
"sort": 2, "sort": 2,
"field_type": "text" "field_type": "text"
}, },
@ -61,7 +70,11 @@
"default_value": "4020", "default_value": "4020",
"user_viewable": false, "user_viewable": false,
"user_editable": false, "user_editable": false,
"rules": "required|string|max:20", "rules": [
"required",
"string",
"max:20"
],
"sort": 3, "sort": 3,
"field_type": "text" "field_type": "text"
}, },
@ -72,7 +85,10 @@
"default_value": "", "default_value": "",
"user_viewable": true, "user_viewable": true,
"user_editable": true, "user_editable": true,
"rules": "nullable|integer", "rules": [
"nullable",
"integer"
],
"sort": 4, "sort": 4,
"field_type": "text" "field_type": "text"
}, },
@ -83,7 +99,10 @@
"default_value": "sandbox", "default_value": "sandbox",
"user_viewable": true, "user_viewable": true,
"user_editable": true, "user_editable": true,
"rules": "required|string", "rules": [
"required",
"string"
],
"sort": 5, "sort": 5,
"field_type": "text" "field_type": "text"
}, },
@ -94,7 +113,11 @@
"default_value": "32", "default_value": "32",
"user_viewable": true, "user_viewable": true,
"user_editable": true, "user_editable": true,
"rules": "required|integer|max:128", "rules": [
"required",
"integer",
"max:128"
],
"sort": 6, "sort": 6,
"field_type": "text" "field_type": "text"
}, },
@ -105,7 +128,11 @@
"default_value": "22", "default_value": "22",
"user_viewable": true, "user_viewable": true,
"user_editable": true, "user_editable": true,
"rules": "required|integer|max:100", "rules": [
"required",
"integer",
"max:100"
],
"sort": 7, "sort": 7,
"field_type": "text" "field_type": "text"
}, },
@ -116,7 +143,10 @@
"default_value": "0", "default_value": "0",
"user_viewable": true, "user_viewable": true,
"user_editable": true, "user_editable": true,
"rules": "required|boolean", "rules": [
"required",
"boolean"
],
"sort": 8, "sort": 8,
"field_type": "text" "field_type": "text"
} }

View File

@ -4,7 +4,7 @@
"version": "PTDL_v2", "version": "PTDL_v2",
"update_url": "https:\/\/github.com\/pelican-dev\/panel\/raw\/main\/database\/Seeders\/eggs\/source-engine\/egg-insurgency.json" "update_url": "https:\/\/github.com\/pelican-dev\/panel\/raw\/main\/database\/Seeders\/eggs\/source-engine\/egg-insurgency.json"
}, },
"exported_at": "2024-07-03T14:34:05+00:00", "exported_at": "2024-07-25T12:05:30+00:00",
"name": "Insurgency", "name": "Insurgency",
"author": "panel@example.com", "author": "panel@example.com",
"uuid": "a5702286-655b-4069-bf1e-925c7300b61a", "uuid": "a5702286-655b-4069-bf1e-925c7300b61a",
@ -38,7 +38,10 @@
"default_value": "237410", "default_value": "237410",
"user_viewable": true, "user_viewable": true,
"user_editable": false, "user_editable": false,
"rules": "required|regex:\/^(237410)$\/", "rules": [
"required",
"regex:\/^(237410)$\/"
],
"sort": 1, "sort": 1,
"field_type": "text" "field_type": "text"
}, },
@ -49,7 +52,10 @@
"default_value": "sinjar", "default_value": "sinjar",
"user_viewable": true, "user_viewable": true,
"user_editable": true, "user_editable": true,
"rules": "required|regex:\/^(\\w{1,20})$\/", "rules": [
"required",
"regex:\/^(\\w{1,20})$\/"
],
"sort": 2, "sort": 2,
"field_type": "text" "field_type": "text"
} }

View File

@ -4,7 +4,7 @@
"version": "PTDL_v2", "version": "PTDL_v2",
"update_url": "https:\/\/github.com\/pelican-dev\/panel\/raw\/main\/database\/Seeders\/eggs\/source-engine\/egg-team-fortress2.json" "update_url": "https:\/\/github.com\/pelican-dev\/panel\/raw\/main\/database\/Seeders\/eggs\/source-engine\/egg-team-fortress2.json"
}, },
"exported_at": "2024-07-03T14:34:06+00:00", "exported_at": "2024-07-25T12:05:42+00:00",
"name": "Team Fortress 2", "name": "Team Fortress 2",
"author": "panel@example.com", "author": "panel@example.com",
"uuid": "7f8eb681-b2c8-4bf8-b9f4-d79ff70b6e5d", "uuid": "7f8eb681-b2c8-4bf8-b9f4-d79ff70b6e5d",
@ -39,7 +39,10 @@
"default_value": "232250", "default_value": "232250",
"user_viewable": true, "user_viewable": true,
"user_editable": false, "user_editable": false,
"rules": "required|in:232250", "rules": [
"required",
"in:232250"
],
"sort": 1, "sort": 1,
"field_type": "text" "field_type": "text"
}, },
@ -50,7 +53,10 @@
"default_value": "cp_dustbowl", "default_value": "cp_dustbowl",
"user_viewable": true, "user_viewable": true,
"user_editable": true, "user_editable": true,
"rules": "required|regex:\/^(\\w{1,20})$\/", "rules": [
"required",
"regex:\/^(\\w{1,20})$\/"
],
"sort": 2, "sort": 2,
"field_type": "text" "field_type": "text"
}, },
@ -61,7 +67,12 @@
"default_value": "", "default_value": "",
"user_viewable": true, "user_viewable": true,
"user_editable": true, "user_editable": true,
"rules": "required|string|alpha_num|size:32", "rules": [
"required",
"string",
"alpha_num",
"size:32"
],
"sort": 3, "sort": 3,
"field_type": "text" "field_type": "text"
} }

View File

@ -4,7 +4,7 @@
"version": "PTDL_v2", "version": "PTDL_v2",
"update_url": "https:\/\/github.com\/pelican-dev\/panel\/raw\/main\/database\/Seeders\/eggs\/voice-servers\/egg-mumble-server.json" "update_url": "https:\/\/github.com\/pelican-dev\/panel\/raw\/main\/database\/Seeders\/eggs\/voice-servers\/egg-mumble-server.json"
}, },
"exported_at": "2024-07-03T14:34:07+00:00", "exported_at": "2024-07-25T12:05:52+00:00",
"name": "Mumble Server", "name": "Mumble Server",
"author": "panel@example.com", "author": "panel@example.com",
"uuid": "727ee758-7fb2-4979-972b-d3eba4e1e9f0", "uuid": "727ee758-7fb2-4979-972b-d3eba4e1e9f0",
@ -36,7 +36,11 @@
"default_value": "100", "default_value": "100",
"user_viewable": true, "user_viewable": true,
"user_editable": false, "user_editable": false,
"rules": "required|numeric|digits_between:1,5", "rules": [
"required",
"numeric",
"digits_between:1,5"
],
"sort": 1, "sort": 1,
"field_type": "text" "field_type": "text"
} }

View File

@ -4,7 +4,7 @@
"version": "PTDL_v2", "version": "PTDL_v2",
"update_url": "https:\/\/github.com\/pelican-dev\/panel\/raw\/main\/database\/Seeders\/eggs\/voice-servers\/egg-teamspeak3-server.json" "update_url": "https:\/\/github.com\/pelican-dev\/panel\/raw\/main\/database\/Seeders\/eggs\/voice-servers\/egg-teamspeak3-server.json"
}, },
"exported_at": "2024-07-03T14:34:08+00:00", "exported_at": "2024-07-25T12:06:05+00:00",
"name": "Teamspeak3 Server", "name": "Teamspeak3 Server",
"author": "panel@example.com", "author": "panel@example.com",
"uuid": "983b1fac-d322-4d5f-a636-436127326b37", "uuid": "983b1fac-d322-4d5f-a636-436127326b37",
@ -36,7 +36,11 @@
"default_value": "latest", "default_value": "latest",
"user_viewable": true, "user_viewable": true,
"user_editable": true, "user_editable": true,
"rules": "required|string|max:6", "rules": [
"required",
"string",
"max:6"
],
"sort": 1, "sort": 1,
"field_type": "text" "field_type": "text"
}, },
@ -47,7 +51,11 @@
"default_value": "30033", "default_value": "30033",
"user_viewable": true, "user_viewable": true,
"user_editable": false, "user_editable": false,
"rules": "required|integer|between:1025,65535", "rules": [
"required",
"integer",
"between:1025,65535"
],
"sort": 2, "sort": 2,
"field_type": "text" "field_type": "text"
}, },
@ -58,7 +66,11 @@
"default_value": "10011", "default_value": "10011",
"user_viewable": true, "user_viewable": true,
"user_editable": false, "user_editable": false,
"rules": "required|integer|between:1025,65535", "rules": [
"required",
"integer",
"between:1025,65535"
],
"sort": 3, "sort": 3,
"field_type": "text" "field_type": "text"
}, },
@ -69,7 +81,11 @@
"default_value": "raw,http,ssh", "default_value": "raw,http,ssh",
"user_viewable": true, "user_viewable": true,
"user_editable": true, "user_editable": true,
"rules": "required|string|max:12", "rules": [
"required",
"string",
"max:12"
],
"sort": 4, "sort": 4,
"field_type": "text" "field_type": "text"
}, },
@ -80,7 +96,11 @@
"default_value": "10022", "default_value": "10022",
"user_viewable": true, "user_viewable": true,
"user_editable": false, "user_editable": false,
"rules": "required|integer|between:1025,65535", "rules": [
"required",
"integer",
"between:1025,65535"
],
"sort": 5, "sort": 5,
"field_type": "text" "field_type": "text"
}, },
@ -91,7 +111,11 @@
"default_value": "10080", "default_value": "10080",
"user_viewable": true, "user_viewable": true,
"user_editable": false, "user_editable": false,
"rules": "required|integer|between:1025,65535", "rules": [
"required",
"integer",
"between:1025,65535"
],
"sort": 6, "sort": 6,
"field_type": "text" "field_type": "text"
} }

View File

@ -0,0 +1,37 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('egg_variables', function (Blueprint $table) {
$table->json('rules')->change();
});
DB::table('egg_variables')->select(['id', 'rules'])->cursor()->each(function ($eggVariable) {
DB::table('egg_variables')->where('id', $eggVariable->id)->update(['rules' => explode('|', $eggVariable->rules)]);
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('api_keys', function (Blueprint $table) {
$table->text('rules')->change();
});
DB::table('egg_variables')->select(['id', 'rules'])->cursor()->each(function ($eggVariable) {
DB::table('egg_variables')->where('id', $eggVariable->id)->update(['rules' => implode('|', json_decode($eggVariable->rules))]);
});
}
};

View File

@ -120,7 +120,7 @@ class UpdateStartupVariableTest extends ClientApiIntegrationTestCase
[$user, $server] = $this->generateTestAccount(); [$user, $server] = $this->generateTestAccount();
$egg = $this->cloneEggAndVariables($server->egg); $egg = $this->cloneEggAndVariables($server->egg);
$egg->variables()->first()->update(['rules' => 'nullable|string']); $egg->variables()->first()->update(['rules' => ['nullable', 'string']]);
$server->fill(['egg_id' => $egg->id])->save(); $server->fill(['egg_id' => $egg->id])->save();
$server->refresh(); $server->refresh();

View File

@ -120,7 +120,7 @@ class VariableValidatorServiceTest extends IntegrationTestCase
$egg = $this->cloneEggAndVariables($this->egg); $egg = $this->cloneEggAndVariables($this->egg);
$egg->variables()->where('env_variable', '!=', 'BUNGEE_VERSION')->delete(); $egg->variables()->where('env_variable', '!=', 'BUNGEE_VERSION')->delete();
$egg->variables()->update(['rules' => 'nullable|string']); $egg->variables()->update(['rules' => ['nullable', 'string']]);
$response = $this->getService()->handle($egg->id, []); $response = $this->getService()->handle($egg->id, []);
$this->assertCount(1, $response); $this->assertCount(1, $response);