diff --git a/app/Filament/Server/Resources/FileResource/Pages/ListFiles.php b/app/Filament/Server/Resources/FileResource/Pages/ListFiles.php index d55b27830..e4dee4ad0 100644 --- a/app/Filament/Server/Resources/FileResource/Pages/ListFiles.php +++ b/app/Filament/Server/Resources/FileResource/Pages/ListFiles.php @@ -40,6 +40,7 @@ use Illuminate\Database\Eloquent\Collection; use Illuminate\Http\Client\ConnectionException; use Illuminate\Http\UploadedFile; use Illuminate\Routing\Route; +use Illuminate\Support\Carbon; use Illuminate\Support\Facades\Route as RouteFacade; use Livewire\Attributes\Locked; @@ -295,16 +296,24 @@ class ListFiles extends ListRecords ->disabled($this->isDisabled) ->label('Archive') ->icon('tabler-archive') - ->action(function (File $file) { - $this->getDaemonFileRepository()->compressFiles($this->path, [$file->name]); + ->form([ + TextInput::make('name') + ->label('Archive name') + ->placeholder(fn () => 'archive-' . str(Carbon::now()->toRfc3339String())->replace(':', '')->before('+0000') . 'Z') + ->suffix('.tar.gz'), + ]) + ->action(function ($data, File $file) { + $archive = $this->getDaemonFileRepository()->compressFiles($this->path, [$file->name], $data['name']); Activity::event('server:file.compress') + ->property('name', $archive['name']) ->property('directory', $this->path) ->property('files', [$file->name]) ->log(); Notification::make() ->title('Archive created') + ->body($archive['name']) ->success() ->send(); @@ -383,18 +392,26 @@ class ListFiles extends ListRecords BulkAction::make('archive') ->authorize(fn () => auth()->user()->can(Permission::ACTION_FILE_ARCHIVE, $server)) ->disabled($this->isDisabled) - ->action(function (Collection $files) { + ->form([ + TextInput::make('name') + ->label('Archive name') + ->placeholder(fn () => 'archive-' . str(Carbon::now()->toRfc3339String())->replace(':', '')->before('+0000') . 'Z') + ->suffix('.tar.gz'), + ]) + ->action(function ($data, Collection $files) { $files = $files->map(fn ($file) => $file['name'])->toArray(); - $this->getDaemonFileRepository()->compressFiles($this->path, $files); + $archive = $this->getDaemonFileRepository()->compressFiles($this->path, $files, $data['name']); Activity::event('server:file.compress') + ->property('name', $archive['name']) ->property('directory', $this->path) ->property('files', $files) ->log(); Notification::make() ->title('Archive created') + ->body($archive['name']) ->success() ->send(); diff --git a/app/Http/Controllers/Api/Client/Servers/FileController.php b/app/Http/Controllers/Api/Client/Servers/FileController.php index ea0895743..133c92202 100644 --- a/app/Http/Controllers/Api/Client/Servers/FileController.php +++ b/app/Http/Controllers/Api/Client/Servers/FileController.php @@ -210,10 +210,12 @@ class FileController extends ClientApiController { $file = $this->fileRepository->setServer($server)->compressFiles( $request->input('root'), - $request->input('files') + $request->input('files'), + $request->input('name') ); Activity::event('server:file.compress') + ->property('name', $file['name']) ->property('directory', $request->input('root')) ->property('files', $request->input('files')) ->log(); diff --git a/app/Http/Requests/Api/Client/Servers/Files/CompressFilesRequest.php b/app/Http/Requests/Api/Client/Servers/Files/CompressFilesRequest.php index 6e060a6d3..9c53e6d7f 100644 --- a/app/Http/Requests/Api/Client/Servers/Files/CompressFilesRequest.php +++ b/app/Http/Requests/Api/Client/Servers/Files/CompressFilesRequest.php @@ -21,6 +21,7 @@ class CompressFilesRequest extends ClientApiRequest 'root' => 'sometimes|nullable|string', 'files' => 'required|array', 'files.*' => 'string', + 'name' => 'sometimes|nullable|string', ]; } } diff --git a/app/Repositories/Daemon/DaemonFileRepository.php b/app/Repositories/Daemon/DaemonFileRepository.php index 5cf1be031..f7d5c78e3 100644 --- a/app/Repositories/Daemon/DaemonFileRepository.php +++ b/app/Repositories/Daemon/DaemonFileRepository.php @@ -138,7 +138,7 @@ class DaemonFileRepository extends DaemonRepository * * @throws ConnectionException */ - public function compressFiles(?string $root, array $files): array + public function compressFiles(?string $root, array $files, ?string $name): array { return $this->getHttpClient() // Wait for up to 15 minutes for the archive to be completed when calling this endpoint @@ -148,6 +148,7 @@ class DaemonFileRepository extends DaemonRepository [ 'root' => $root ?? '/', 'files' => $files, + 'name' => $name ?? '', ] )->json(); }