mirror of
https://github.com/pelican-dev/panel.git
synced 2025-05-20 01:44:45 +02:00

* Fix copy paste AllocationsRelationManager * We shouldn't let the user know if the user is correct but the password isn't * Add missing `trans()` `EditServer` * Add missing `trans()` User `ServersRelationManager` * Replace every `__()` with `trans()` helper * Fix `exceptions` `User` Model * Replace `Translator->get()` with `trans()` helper * Revert "We shouldn't let the user know if the user is correct but the password isn't" This reverts commit e156ee4b38e9e969662a532648c78fdc1e9b0166. that's stock laravel, therefore it needs to stay
115 lines
5.1 KiB
PHP
115 lines
5.1 KiB
PHP
<?php
|
|
|
|
namespace App\Filament\Admin\Resources\NodeResource\RelationManagers;
|
|
|
|
use App\Filament\Admin\Resources\ServerResource\Pages\CreateServer;
|
|
use App\Models\Allocation;
|
|
use App\Models\Node;
|
|
use App\Services\Allocations\AssignmentService;
|
|
use Filament\Forms\Components\Select;
|
|
use Filament\Forms\Components\TagsInput;
|
|
use Filament\Forms\Components\TextInput;
|
|
use Filament\Forms\Get;
|
|
use Filament\Forms\Set;
|
|
use Filament\Resources\RelationManagers\RelationManager;
|
|
use Filament\Tables;
|
|
use Filament\Tables\Actions\BulkActionGroup;
|
|
use Filament\Tables\Actions\DeleteBulkAction;
|
|
use Filament\Tables\Columns\SelectColumn;
|
|
use Filament\Tables\Columns\TextColumn;
|
|
use Filament\Tables\Columns\TextInputColumn;
|
|
use Filament\Tables\Table;
|
|
|
|
/**
|
|
* @method Node getOwnerRecord()
|
|
*/
|
|
class AllocationsRelationManager extends RelationManager
|
|
{
|
|
protected static string $relationship = 'allocations';
|
|
|
|
protected static ?string $icon = 'tabler-plug-connected';
|
|
|
|
public function setTitle(): string
|
|
{
|
|
return trans('admin/server.allocations');
|
|
|
|
}
|
|
|
|
public function table(Table $table): Table
|
|
{
|
|
return $table
|
|
->recordTitleAttribute('ip')
|
|
|
|
// Non Primary Allocations
|
|
// ->checkIfRecordIsSelectableUsing(fn (Allocation $allocation) => $allocation->id !== $allocation->server?->allocation_id)
|
|
|
|
// All assigned allocations
|
|
->checkIfRecordIsSelectableUsing(fn (Allocation $allocation) => $allocation->server_id === null)
|
|
->paginationPageOptions(['10', '20', '50', '100', '200', '500'])
|
|
->searchable()
|
|
->heading('')
|
|
->selectCurrentPageOnly() //Prevent people from trying to nuke 30,000 ports at once.... -,-
|
|
->columns([
|
|
TextColumn::make('id')
|
|
->toggleable()
|
|
->toggledHiddenByDefault(),
|
|
TextColumn::make('port')
|
|
->searchable()
|
|
->label(trans('admin/node.ports')),
|
|
TextColumn::make('server.name')
|
|
->label(trans('admin/node.table.servers'))
|
|
->icon('tabler-brand-docker')
|
|
->visibleFrom('md')
|
|
->searchable()
|
|
->url(fn (Allocation $allocation): string => $allocation->server ? route('filament.admin.resources.servers.edit', ['record' => $allocation->server]) : ''),
|
|
TextInputColumn::make('ip_alias')
|
|
->searchable()
|
|
->label(trans('admin/node.table.alias')),
|
|
SelectColumn::make('ip')
|
|
->options(fn (Allocation $allocation) => collect($this->getOwnerRecord()->ipAddresses())->merge([$allocation->ip])->mapWithKeys(fn (string $ip) => [$ip => $ip]))
|
|
->selectablePlaceholder(false)
|
|
->searchable()
|
|
->label(trans('admin/node.table.ip')),
|
|
])
|
|
->headerActions([
|
|
Tables\Actions\Action::make('create new allocation')
|
|
->label(trans('admin/node.create_allocation'))
|
|
->form(fn () => [
|
|
Select::make('allocation_ip')
|
|
->options(collect($this->getOwnerRecord()->ipAddresses())->mapWithKeys(fn (string $ip) => [$ip => $ip]))
|
|
->label(trans('admin/node.ip_address'))
|
|
->inlineLabel()
|
|
->ipv4()
|
|
->helperText(trans('admin/node.ip_help'))
|
|
->afterStateUpdated(fn (Set $set) => $set('allocation_ports', []))
|
|
->live()
|
|
->required(),
|
|
TextInput::make('allocation_alias')
|
|
->label(trans('admin/node.table.alias'))
|
|
->inlineLabel()
|
|
->default(null)
|
|
->helperText(trans('admin/node.alias_help'))
|
|
->required(false),
|
|
TagsInput::make('allocation_ports')
|
|
->placeholder('27015, 27017-27019')
|
|
->label(trans('admin/node.ports'))
|
|
->inlineLabel()
|
|
->live()
|
|
->disabled(fn (Get $get) => empty($get('allocation_ip')))
|
|
->afterStateUpdated(fn ($state, Set $set, Get $get) => $set('allocation_ports',
|
|
CreateServer::retrieveValidPorts($this->getOwnerRecord(), $state, $get('allocation_ip')))
|
|
)
|
|
->splitKeys(['Tab', ' ', ','])
|
|
->required(),
|
|
])
|
|
->action(fn (array $data, AssignmentService $service) => $service->handle($this->getOwnerRecord(), $data)),
|
|
])
|
|
->bulkActions([
|
|
BulkActionGroup::make([
|
|
DeleteBulkAction::make()
|
|
->authorize(fn () => auth()->user()->can('delete allocation')),
|
|
]),
|
|
]);
|
|
}
|
|
}
|