diff --git a/app/Filament/Admin/Resources/UserResource/Pages/ListUsers.php b/app/Filament/Admin/Resources/UserResource/Pages/ListUsers.php index 1efa6e1d6..793f70e9c 100644 --- a/app/Filament/Admin/Resources/UserResource/Pages/ListUsers.php +++ b/app/Filament/Admin/Resources/UserResource/Pages/ListUsers.php @@ -8,7 +8,6 @@ use App\Traits\Filament\CanCustomizeHeaderWidgets; use Filament\Resources\Pages\ListRecords; use Filament\Actions\Action; use Filament\Actions\ActionGroup; -use Filament\Actions\CreateAction; class ListUsers extends ListRecords { @@ -20,8 +19,6 @@ class ListUsers extends ListRecords /** @return array */ protected function getDefaultHeaderActions(): array { - return [ - CreateAction::make(), - ]; + return []; } } diff --git a/app/Filament/Server/Resources/AllocationResource.php b/app/Filament/Server/Resources/AllocationResource.php index f7fcf25a6..a344c56c5 100644 --- a/app/Filament/Server/Resources/AllocationResource.php +++ b/app/Filament/Server/Resources/AllocationResource.php @@ -7,15 +7,18 @@ use App\Facades\Activity; use App\Models\Allocation; use App\Models\Permission; use App\Models\Server; +use App\Services\Allocations\FindAssignableAllocationService; use App\Traits\Filament\BlockAccessInConflict; use App\Traits\Filament\CanCustomizePages; use App\Traits\Filament\CanCustomizeRelations; use App\Traits\Filament\CanModifyTable; use Exception; +use Filament\Actions\Action; use Filament\Actions\DetachAction; use Filament\Facades\Filament; use Filament\Resources\Pages\PageRegistration; use Filament\Resources\Resource; +use Filament\Support\Enums\IconSize; use Filament\Tables\Columns\IconColumn; use Filament\Tables\Columns\TextColumn; use Filament\Tables\Columns\TextInputColumn; @@ -88,6 +91,28 @@ class AllocationResource extends Resource ->log(); }) ->after(fn (Allocation $allocation) => $allocation->id === $server->allocation_id && $server->update(['allocation_id' => $server->allocations()->first()?->id])), + ]) + ->toolbarActions([ + Action::make('addAllocation') + ->hiddenLabel()->iconButton()->iconSize(IconSize::Large) + ->icon(fn () => $server->allocations()->count() >= $server->allocation_limit ? 'tabler-network-off' : 'tabler-network') + ->authorize(fn () => auth()->user()->can(Permission::ACTION_ALLOCATION_CREATE, $server)) + ->tooltip(fn () => $server->allocations()->count() >= $server->allocation_limit ? trans('server/network.limit') : trans('server/network.add')) + ->hidden(fn () => !config('panel.client_features.allocations.enabled')) + ->disabled(fn () => $server->allocations()->count() >= $server->allocation_limit) + ->color(fn () => $server->allocations()->count() >= $server->allocation_limit ? 'danger' : 'primary') + ->action(function (FindAssignableAllocationService $service) use ($server) { + $allocation = $service->handle($server); + + if (!$server->allocation_id) { + $server->update(['allocation_id' => $allocation->id]); + } + + Activity::event('server:allocation.create') + ->subject($allocation) + ->property('allocation', $allocation->address) + ->log(); + }), ]); } diff --git a/app/Filament/Server/Resources/AllocationResource/Pages/ListAllocations.php b/app/Filament/Server/Resources/AllocationResource/Pages/ListAllocations.php index 6ae33475a..c41995456 100644 --- a/app/Filament/Server/Resources/AllocationResource/Pages/ListAllocations.php +++ b/app/Filament/Server/Resources/AllocationResource/Pages/ListAllocations.php @@ -2,18 +2,12 @@ namespace App\Filament\Server\Resources\AllocationResource\Pages; -use App\Facades\Activity; use App\Filament\Server\Resources\AllocationResource; -use App\Models\Permission; -use App\Models\Server; -use App\Services\Allocations\FindAssignableAllocationService; use App\Traits\Filament\CanCustomizeHeaderActions; use App\Traits\Filament\CanCustomizeHeaderWidgets; use Filament\Actions\Action; use Filament\Actions\ActionGroup; -use Filament\Facades\Filament; use Filament\Resources\Pages\ListRecords; -use Filament\Support\Enums\IconSize; class ListAllocations extends ListRecords { @@ -25,31 +19,7 @@ class ListAllocations extends ListRecords /** @return array */ protected function getDefaultHeaderActions(): array { - /** @var Server $server */ - $server = Filament::getTenant(); - - return [ - Action::make('addAllocation') - ->hiddenLabel()->iconButton()->iconSize(IconSize::Large) - ->icon(fn () => $server->allocations()->count() >= $server->allocation_limit ? 'tabler-network-off' : 'tabler-network') - ->authorize(fn () => auth()->user()->can(Permission::ACTION_ALLOCATION_CREATE, $server)) - ->tooltip(fn () => $server->allocations()->count() >= $server->allocation_limit ? trans('server/network.limit') : trans('server/network.add')) - ->hidden(fn () => !config('panel.client_features.allocations.enabled')) - ->disabled(fn () => $server->allocations()->count() >= $server->allocation_limit) - ->color(fn () => $server->allocations()->count() >= $server->allocation_limit ? 'danger' : 'primary') - ->action(function (FindAssignableAllocationService $service) use ($server) { - $allocation = $service->handle($server); - - if (!$server->allocation_id) { - $server->update(['allocation_id' => $allocation->id]); - } - - Activity::event('server:allocation.create') - ->subject($allocation) - ->property('allocation', $allocation->address) - ->log(); - }), - ]; + return []; } public function getBreadcrumbs(): array diff --git a/app/Filament/Server/Resources/BackupResource/Pages/ListBackups.php b/app/Filament/Server/Resources/BackupResource/Pages/ListBackups.php index 3ab6aac8b..14fd1c063 100644 --- a/app/Filament/Server/Resources/BackupResource/Pages/ListBackups.php +++ b/app/Filament/Server/Resources/BackupResource/Pages/ListBackups.php @@ -2,21 +2,12 @@ namespace App\Filament\Server\Resources\BackupResource\Pages; -use App\Facades\Activity; use App\Filament\Server\Resources\BackupResource; -use App\Models\Permission; -use App\Models\Server; -use App\Services\Backups\InitiateBackupService; use App\Traits\Filament\CanCustomizeHeaderActions; use App\Traits\Filament\CanCustomizeHeaderWidgets; use Filament\Actions\Action; use Filament\Actions\ActionGroup; -use Filament\Actions\CreateAction; -use Filament\Facades\Filament; -use Filament\Notifications\Notification; use Filament\Resources\Pages\ListRecords; -use Filament\Support\Enums\IconSize; -use Symfony\Component\HttpKernel\Exception\HttpException; class ListBackups extends ListRecords { @@ -28,46 +19,7 @@ class ListBackups extends ListRecords /** @return array */ protected function getDefaultHeaderActions(): array { - /** @var Server $server */ - $server = Filament::getTenant(); - - return [ - CreateAction::make() - ->authorize(fn () => auth()->user()->can(Permission::ACTION_BACKUP_CREATE, $server)) - ->icon('tabler-file-zip')->iconButton()->iconSize(IconSize::Large) - ->disabled(fn () => $server->backups()->count() >= $server->backup_limit) - ->tooltip(fn () => $server->backups()->count() >= $server->backup_limit ? trans('server/backup.actions.create.limit') : trans('server/backup.actions.create.title')) - ->color(fn () => $server->backups()->count() >= $server->backup_limit ? 'danger' : 'primary') - ->createAnother(false) - ->action(function (InitiateBackupService $initiateBackupService, $data) use ($server) { - $action = $initiateBackupService->setIgnoredFiles(explode(PHP_EOL, $data['ignored'] ?? '')); - - if (auth()->user()->can(Permission::ACTION_BACKUP_DELETE, $server)) { - $action->setIsLocked((bool) $data['is_locked']); - } - - try { - $backup = $action->handle($server, $data['name']); - - Activity::event('server:backup.start') - ->subject($backup) - ->property(['name' => $backup->name, 'locked' => (bool) $data['is_locked']]) - ->log(); - - return Notification::make() - ->title(trans('server/backup.actions.create.notification_success')) - ->body(trans('server/backup.actions.create.created', ['name' => $backup->name])) - ->success() - ->send(); - } catch (HttpException $e) { - return Notification::make() - ->title(trans('server/backup.actions.create.notification_fail')) - ->body($e->getMessage() . ' Try again' . ($e->getHeaders()['Retry-After'] ? ' in ' . $e->getHeaders()['Retry-After'] . ' seconds.' : '')) - ->danger() - ->send(); - } - }), - ]; + return []; } public function getBreadcrumbs(): array diff --git a/app/Filament/Server/Resources/DatabaseResource.php b/app/Filament/Server/Resources/DatabaseResource.php index 661e7a590..7904942c5 100644 --- a/app/Filament/Server/Resources/DatabaseResource.php +++ b/app/Filament/Server/Resources/DatabaseResource.php @@ -7,6 +7,7 @@ use App\Filament\Components\Actions\RotateDatabasePasswordAction; use App\Filament\Server\Resources\DatabaseResource\Pages\ListDatabases; use App\Filament\Components\Tables\Columns\DateTimeColumn; use App\Models\Database; +use App\Models\DatabaseHost; use App\Models\Permission; use App\Models\Server; use App\Services\Databases\DatabaseManagementService; @@ -17,13 +18,17 @@ use App\Traits\Filament\CanModifyForm; use App\Traits\Filament\CanModifyTable; use App\Traits\Filament\HasLimitBadge; use Exception; +use Filament\Actions\CreateAction; use Filament\Actions\DeleteAction; use Filament\Actions\ViewAction; use Filament\Facades\Filament; +use Filament\Forms\Components\Select; use Filament\Forms\Components\TextInput; use Filament\Resources\Pages\PageRegistration; use Filament\Resources\Resource; +use Filament\Schemas\Components\Grid; use Filament\Schemas\Schema; +use Filament\Support\Enums\IconSize; use Filament\Tables\Columns\TextColumn; use Filament\Tables\Table; use Illuminate\Database\Eloquent\Model; @@ -109,6 +114,9 @@ class DatabaseResource extends Resource */ public static function defaultTable(Table $table): Table { + /** @var Server $server */ + $server = Filament::getTenant(); + return $table ->columns([ TextColumn::make('host') @@ -130,6 +138,45 @@ class DatabaseResource extends Resource ->modalHeading(fn (Database $database) => 'Viewing ' . $database->database), DeleteAction::make() ->using(fn (Database $database, DatabaseManagementService $service) => $service->delete($database)), + ]) + ->toolbarActions([ + CreateAction::make('new') + ->hiddenLabel()->iconButton()->iconSize(IconSize::Large) + ->icon(fn () => $server->databases()->count() >= $server->database_limit ? 'tabler-database-x' : 'tabler-database-plus') + ->tooltip(fn () => $server->databases()->count() >= $server->database_limit ? trans('server/database.limit') : trans('server/database.create_database')) + ->disabled(fn () => $server->databases()->count() >= $server->database_limit) + ->color(fn () => $server->databases()->count() >= $server->database_limit ? 'danger' : 'primary') + ->createAnother(false) + ->schema([ + Grid::make() + ->columns(2) + ->schema([ + Select::make('database_host_id') + ->label(trans('server/database.database_host')) + ->columnSpan(2) + ->required() + ->placeholder(trans('server/database.database_host_select')) + ->options(fn () => $server->node->databaseHosts->mapWithKeys(fn (DatabaseHost $databaseHost) => [$databaseHost->id => $databaseHost->name])), + TextInput::make('database') + ->label(trans('server/database.name')) + ->columnSpan(1) + ->prefix('s'. $server->id . '_') + ->hintIcon('tabler-question-mark') + ->hintIconTooltip(trans('server/database.name_hint')), + TextInput::make('remote') + ->label(trans('server/database.connections_from')) + ->columnSpan(1) + ->default('%'), + ]), + ]) + ->action(function ($data, DatabaseManagementService $service) use ($server) { + if (empty($data['database'])) { + $data['database'] = str_random(12); + } + $data['database'] = 's'. $server->id . '_' . $data['database']; + + $service->create($server, $data); + }), ]); } diff --git a/app/Filament/Server/Resources/DatabaseResource/Pages/ListDatabases.php b/app/Filament/Server/Resources/DatabaseResource/Pages/ListDatabases.php index edfe715c1..0e61c0ba3 100644 --- a/app/Filament/Server/Resources/DatabaseResource/Pages/ListDatabases.php +++ b/app/Filament/Server/Resources/DatabaseResource/Pages/ListDatabases.php @@ -3,20 +3,11 @@ namespace App\Filament\Server\Resources\DatabaseResource\Pages; use App\Filament\Server\Resources\DatabaseResource; -use App\Models\DatabaseHost; -use App\Models\Server; -use App\Services\Databases\DatabaseManagementService; use App\Traits\Filament\CanCustomizeHeaderActions; use App\Traits\Filament\CanCustomizeHeaderWidgets; use Filament\Actions\Action; use Filament\Actions\ActionGroup; -use Filament\Actions\CreateAction; -use Filament\Facades\Filament; -use Filament\Schemas\Components\Grid; -use Filament\Forms\Components\Select; -use Filament\Forms\Components\TextInput; use Filament\Resources\Pages\ListRecords; -use Filament\Support\Enums\IconSize; class ListDatabases extends ListRecords { @@ -28,48 +19,7 @@ class ListDatabases extends ListRecords /** @return array */ protected function getDefaultHeaderActions(): array { - /** @var Server $server */ - $server = Filament::getTenant(); - - return [ - CreateAction::make('new') - ->hiddenLabel()->iconButton()->iconSize(IconSize::Large) - ->icon(fn () => $server->databases()->count() >= $server->database_limit ? 'tabler-database-x' : 'tabler-database-plus') - ->tooltip(fn () => $server->databases()->count() >= $server->database_limit ? trans('server/database.limit') : trans('server/database.create_database')) - ->disabled(fn () => $server->databases()->count() >= $server->database_limit) - ->color(fn () => $server->databases()->count() >= $server->database_limit ? 'danger' : 'primary') - ->createAnother(false) - ->schema([ - Grid::make() - ->columns(2) - ->schema([ - Select::make('database_host_id') - ->label(trans('server/database.database_host')) - ->columnSpan(2) - ->required() - ->placeholder(trans('server/database.database_host_select')) - ->options(fn () => $server->node->databaseHosts->mapWithKeys(fn (DatabaseHost $databaseHost) => [$databaseHost->id => $databaseHost->name])), - TextInput::make('database') - ->label(trans('server/database.name')) - ->columnSpan(1) - ->prefix('s'. $server->id . '_') - ->hintIcon('tabler-question-mark') - ->hintIconTooltip(trans('server/database.name_hint')), - TextInput::make('remote') - ->label(trans('server/database.connections_from')) - ->columnSpan(1) - ->default('%'), - ]), - ]) - ->action(function ($data, DatabaseManagementService $service) use ($server) { - if (empty($data['database'])) { - $data['database'] = str_random(12); - } - $data['database'] = 's'. $server->id . '_' . $data['database']; - - $service->create($server, $data); - }), - ]; + return []; } public function getBreadcrumbs(): array diff --git a/app/Filament/Server/Resources/ScheduleResource/Pages/ListSchedules.php b/app/Filament/Server/Resources/ScheduleResource/Pages/ListSchedules.php index 62adebe39..5a6ee5a1d 100644 --- a/app/Filament/Server/Resources/ScheduleResource/Pages/ListSchedules.php +++ b/app/Filament/Server/Resources/ScheduleResource/Pages/ListSchedules.php @@ -2,15 +2,12 @@ namespace App\Filament\Server\Resources\ScheduleResource\Pages; -use App\Filament\Components\Actions\ImportScheduleAction; use App\Filament\Server\Resources\ScheduleResource; use App\Traits\Filament\CanCustomizeHeaderActions; use App\Traits\Filament\CanCustomizeHeaderWidgets; use Filament\Actions\Action; use Filament\Actions\ActionGroup; -use Filament\Actions\CreateAction; use Filament\Resources\Pages\ListRecords; -use Filament\Support\Enums\IconSize; class ListSchedules extends ListRecords { @@ -22,16 +19,7 @@ class ListSchedules extends ListRecords /** @return array */ protected function getDefaultHeaderActions(): array { - return [ - CreateAction::make() - ->hiddenLabel()->iconButton()->iconSize(IconSize::Large) - ->icon('tabler-calendar-plus') - ->tooltip(trans('server/schedule.new')), - ImportScheduleAction::make() - ->hiddenLabel()->iconButton()->iconSize(IconSize::Large) - ->icon('tabler-download') - ->tooltip(trans('server/schedule.import')), - ]; + return []; } public function getBreadcrumbs(): array