Add Server ForceDelete (#1134)

This commit is contained in:
MartinOscar 2025-03-23 22:08:59 +01:00 committed by GitHub
parent a8c3082b79
commit b69136d7a4
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 40 additions and 4 deletions

View File

@ -946,17 +946,51 @@ class EditServer extends EditRecord
protected function getHeaderActions(): array protected function getHeaderActions(): array
{ {
/** @var Server $server */
$server = $this->getRecord();
$canForceDelete = cache()->get("servers.$server->uuid.canForceDelete", false);
return [ return [
Actions\Action::make('Delete') Actions\Action::make('Delete')
->successRedirectUrl(route('filament.admin.resources.servers.index'))
->color('danger') ->color('danger')
->label(trans('filament-actions::delete.single.modal.actions.delete.label')) ->label(trans('filament-actions::delete.single.label'))
->modalHeading(trans('filament-actions::delete.single.modal.heading', ['label' => $this->getRecordTitle()]))
->modalSubmitActionLabel(trans('filament-actions::delete.single.label'))
->requiresConfirmation() ->requiresConfirmation()
->action(function (Server $server, ServerDeletionService $service) { ->action(function (Server $server, ServerDeletionService $service) {
try {
$service->handle($server); $service->handle($server);
} catch (ConnectionException) {
cache()->put("servers.$server->uuid.canForceDelete", true, now()->addMinutes(5));
Notification::make()
->title(trans('admin/server.notifications.error_server_delete'))
->body(trans('admin/server.notifications.error_server_delete_body'))
->color('warning')
->icon('tabler-database')
->warning()
->send();
}
})
->hidden(fn () => $canForceDelete)
->authorize(fn (Server $server) => auth()->user()->can('delete server', $server)),
Actions\Action::make('ForceDelete')
->color('danger')
->label(trans('filament-actions::force-delete.single.label'))
->modalHeading(trans('filament-actions::force-delete.single.modal.heading', ['label' => $this->getRecordTitle()]))
->modalSubmitActionLabel(trans('filament-actions::force-delete.single.label'))
->requiresConfirmation()
->action(function (Server $server, ServerDeletionService $service) {
try {
$service->withForce()->handle($server);
return redirect(ListServers::getUrl(panel: 'admin')); return redirect(ListServers::getUrl(panel: 'admin'));
} catch (ConnectionException) {
cache()->forget("servers.$server->uuid.canForceDelete");
}
}) })
->visible(fn () => $canForceDelete)
->authorize(fn (Server $server) => auth()->user()->can('delete server', $server)), ->authorize(fn (Server $server) => auth()->user()->can('delete server', $server)),
Actions\Action::make('console') Actions\Action::make('console')
->label(trans('admin/server.console')) ->label(trans('admin/server.console'))

View File

@ -109,6 +109,8 @@ return [
'server_suspend_help' => 'This will suspend the Server, stop any running processes, and immediately block the user from being able to access their files or otherwise manage the Server through the panel or API.', 'server_suspend_help' => 'This will suspend the Server, stop any running processes, and immediately block the user from being able to access their files or otherwise manage the Server through the panel or API.',
'server_unsuspend_help' => 'This will unsuspend the Server and restore normal user access.', 'server_unsuspend_help' => 'This will unsuspend the Server and restore normal user access.',
'server_unsuspended' => 'Server has been unsuspended', 'server_unsuspended' => 'Server has been unsuspended',
'error_server_delete' => 'Server couldn\'t be safely deleted.',
'error_server_delete_body' => 'You may Force Delete it.',
'create_failed' => 'Could not create Server', 'create_failed' => 'Could not create Server',
'invalid_port_range' => 'Invalid Port Range', 'invalid_port_range' => 'Invalid Port Range',
'invalid_port_range_body' => 'Your port range are not valid integers: :port', 'invalid_port_range_body' => 'Your port range are not valid integers: :port',