mirror of
https://github.com/pelican-dev/panel.git
synced 2025-05-20 01:44:45 +02:00
Update File Manager (#814)
* Make Everything Sortable * Replace app calls
This commit is contained in:
parent
0051d9fefc
commit
53460b8d1b
@ -80,12 +80,15 @@ class ListFiles extends ListRecords
|
||||
return $table
|
||||
->paginated([15, 25, 50, 100])
|
||||
->defaultPaginationPageOption(15)
|
||||
->query(fn () => File::get($server, $this->path)->orderByDesc('is_directory')->orderBy('name'))
|
||||
->query(fn () => File::get($server, $this->path)->orderByDesc('is_directory'))
|
||||
->defaultSort('name')
|
||||
->columns([
|
||||
TextColumn::make('name')
|
||||
->searchable()
|
||||
->sortable()
|
||||
->icon(fn (File $file) => $file->getIcon()),
|
||||
BytesColumn::make('size'),
|
||||
BytesColumn::make('size')
|
||||
->sortable(),
|
||||
DateTimeColumn::make('modified_at')
|
||||
->since()
|
||||
->sortable(),
|
||||
@ -126,9 +129,8 @@ class ListFiles extends ListRecords
|
||||
->default(fn (File $file) => $file->name)
|
||||
->required(),
|
||||
])
|
||||
->action(function ($data, File $file) use ($server) {
|
||||
// @phpstan-ignore-next-line
|
||||
app(DaemonFileRepository::class)
|
||||
->action(function ($data, File $file, DaemonFileRepository $fileRepository) use ($server) {
|
||||
$fileRepository
|
||||
->setServer($server)
|
||||
->renameFiles($this->path, [['to' => $data['name'], 'from' => $file->name]]);
|
||||
|
||||
@ -148,9 +150,8 @@ class ListFiles extends ListRecords
|
||||
->label('Copy')
|
||||
->icon('tabler-copy')
|
||||
->visible(fn (File $file) => $file->is_file)
|
||||
->action(function (File $file) use ($server) {
|
||||
// @phpstan-ignore-next-line
|
||||
app(DaemonFileRepository::class)
|
||||
->action(function (File $file, DaemonFileRepository $fileRepository) use ($server) {
|
||||
$fileRepository
|
||||
->setServer($server)
|
||||
->copyFile(join_paths($this->path, $file->name));
|
||||
|
||||
@ -170,9 +171,8 @@ class ListFiles extends ListRecords
|
||||
->label('Download')
|
||||
->icon('tabler-download')
|
||||
->visible(fn (File $file) => $file->is_file)
|
||||
->action(function (File $file) use ($server) {
|
||||
// @phpstan-ignore-next-line
|
||||
$token = app(NodeJWTService::class)
|
||||
->action(function (File $file, NodeJWTService $service) use ($server) {
|
||||
$token = $service
|
||||
->setExpiresAt(CarbonImmutable::now()->addMinutes(15))
|
||||
->setUser(auth()->user())
|
||||
->setClaims([
|
||||
@ -201,11 +201,10 @@ class ListFiles extends ListRecords
|
||||
Placeholder::make('new_location')
|
||||
->content(fn (Get $get) => resolve_path('./' . join_paths($this->path, $get('location')))),
|
||||
])
|
||||
->action(function ($data, File $file) use ($server) {
|
||||
->action(function ($data, File $file, DaemonFileRepository $fileRepository) use ($server) {
|
||||
$location = resolve_path(join_paths($this->path, $data['location']));
|
||||
|
||||
// @phpstan-ignore-next-line
|
||||
app(DaemonFileRepository::class)
|
||||
$fileRepository
|
||||
->setServer($server)
|
||||
->renameFiles($this->path, [['to' => $location, 'from' => $file->name]]);
|
||||
|
||||
@ -261,15 +260,14 @@ class ListFiles extends ListRecords
|
||||
return $this->getPermissionsFromModeBit($mode);
|
||||
}),
|
||||
])
|
||||
->action(function ($data, File $file) use ($server) {
|
||||
->action(function ($data, File $file, DaemonFileRepository $fileRepository) use ($server) {
|
||||
$owner = (in_array('read', $data['owner']) ? 4 : 0) | (in_array('write', $data['owner']) ? 2 : 0) | (in_array('execute', $data['owner']) ? 1 : 0);
|
||||
$group = (in_array('read', $data['group']) ? 4 : 0) | (in_array('write', $data['group']) ? 2 : 0) | (in_array('execute', $data['group']) ? 1 : 0);
|
||||
$public = (in_array('read', $data['public']) ? 4 : 0) | (in_array('write', $data['public']) ? 2 : 0) | (in_array('execute', $data['public']) ? 1 : 0);
|
||||
|
||||
$mode = $owner . $group . $public;
|
||||
|
||||
// @phpstan-ignore-next-line
|
||||
app(DaemonFileRepository::class)
|
||||
$fileRepository
|
||||
->setServer($server)
|
||||
->chmodFiles($this->path, [['file' => $file->name, 'mode' => $mode]]);
|
||||
|
||||
@ -282,9 +280,8 @@ class ListFiles extends ListRecords
|
||||
->authorize(fn () => auth()->user()->can(Permission::ACTION_FILE_ARCHIVE, $server))
|
||||
->label('Archive')
|
||||
->icon('tabler-archive')
|
||||
->action(function (File $file) use ($server) {
|
||||
// @phpstan-ignore-next-line
|
||||
app(DaemonFileRepository::class)
|
||||
->action(function (File $file, DaemonFileRepository $fileRepository) use ($server) {
|
||||
$fileRepository
|
||||
->setServer($server)
|
||||
->compressFiles($this->path, [$file->name]);
|
||||
|
||||
@ -305,9 +302,8 @@ class ListFiles extends ListRecords
|
||||
->label('Unarchive')
|
||||
->icon('tabler-archive')
|
||||
->visible(fn (File $file) => $file->isArchive())
|
||||
->action(function (File $file) use ($server) {
|
||||
// @phpstan-ignore-next-line
|
||||
app(DaemonFileRepository::class)
|
||||
->action(function (File $file, DaemonFileRepository $fileRepository) use ($server) {
|
||||
$fileRepository
|
||||
->setServer($server)
|
||||
->decompressFile($this->path, $file->name);
|
||||
|
||||
@ -331,9 +327,8 @@ class ListFiles extends ListRecords
|
||||
->requiresConfirmation()
|
||||
->modalDescription(fn (File $file) => $file->name)
|
||||
->modalHeading('Delete file?')
|
||||
->action(function (File $file) use ($server) {
|
||||
// @phpstan-ignore-next-line
|
||||
app(DaemonFileRepository::class)
|
||||
->action(function (File $file, DaemonFileRepository $fileRepository) use ($server) {
|
||||
$fileRepository
|
||||
->setServer($server)
|
||||
->deleteFiles($this->path, [$file->name]);
|
||||
|
||||
@ -357,14 +352,12 @@ class ListFiles extends ListRecords
|
||||
Placeholder::make('new_location')
|
||||
->content(fn (Get $get) => resolve_path('./' . join_paths($this->path, $get('location') ?? ''))),
|
||||
])
|
||||
->action(function (Collection $files, $data) use ($server) {
|
||||
->action(function (Collection $files, $data, DaemonFileRepository $fileRepository) use ($server) {
|
||||
$location = resolve_path(join_paths($this->path, $data['location']));
|
||||
|
||||
// @phpstan-ignore-next-line
|
||||
$files = $files->map(fn ($file) => ['to' => $location, 'from' => $file->name])->toArray();
|
||||
|
||||
// @phpstan-ignore-next-line
|
||||
app(DaemonFileRepository::class)
|
||||
$fileRepository
|
||||
->setServer($server)
|
||||
->renameFiles($this->path, $files);
|
||||
|
||||
@ -380,12 +373,11 @@ class ListFiles extends ListRecords
|
||||
}),
|
||||
BulkAction::make('archive')
|
||||
->authorize(fn () => auth()->user()->can(Permission::ACTION_FILE_ARCHIVE, $server))
|
||||
->action(function (Collection $files) use ($server) {
|
||||
->action(function (Collection $files, DaemonFileRepository $fileRepository) use ($server) {
|
||||
// @phpstan-ignore-next-line
|
||||
$files = $files->map(fn ($file) => $file->name)->toArray();
|
||||
|
||||
// @phpstan-ignore-next-line
|
||||
app(DaemonFileRepository::class)
|
||||
$fileRepository
|
||||
->setServer($server)
|
||||
->compressFiles($this->path, $files);
|
||||
|
||||
@ -403,12 +395,10 @@ class ListFiles extends ListRecords
|
||||
}),
|
||||
DeleteBulkAction::make()
|
||||
->authorize(fn () => auth()->user()->can(Permission::ACTION_FILE_DELETE, $server))
|
||||
->action(function (Collection $files) use ($server) {
|
||||
->action(function (Collection $files, DaemonFileRepository $fileRepository) use ($server) {
|
||||
// @phpstan-ignore-next-line
|
||||
$files = $files->map(fn ($file) => $file->name)->toArray();
|
||||
|
||||
// @phpstan-ignore-next-line
|
||||
app(DaemonFileRepository::class)
|
||||
$fileRepository
|
||||
->setServer($server)
|
||||
->deleteFiles($this->path, $files);
|
||||
|
||||
@ -438,9 +428,8 @@ class ListFiles extends ListRecords
|
||||
->color('gray')
|
||||
->keyBindings('')
|
||||
->modalSubmitActionLabel('Create')
|
||||
->action(function ($data) use ($server) {
|
||||
// @phpstan-ignore-next-line
|
||||
app(DaemonFileRepository::class)
|
||||
->action(function ($data, DaemonFileRepository $fileRepository) use ($server) {
|
||||
$fileRepository
|
||||
->setServer($server)
|
||||
->putContent(join_paths($this->path, $data['name']), $data['editor'] ?? '');
|
||||
|
||||
@ -467,9 +456,8 @@ class ListFiles extends ListRecords
|
||||
->authorize(fn () => auth()->user()->can(Permission::ACTION_FILE_CREATE, $server))
|
||||
->label('New Folder')
|
||||
->color('gray')
|
||||
->action(function ($data) use ($server) {
|
||||
// @phpstan-ignore-next-line
|
||||
app(DaemonFileRepository::class)
|
||||
->action(function ($data, DaemonFileRepository $fileRepository) use ($server) {
|
||||
$fileRepository
|
||||
->setServer($server)
|
||||
->createDirectory($data['name'], $this->path);
|
||||
|
||||
@ -485,12 +473,11 @@ class ListFiles extends ListRecords
|
||||
HeaderAction::make('upload')
|
||||
->authorize(fn () => auth()->user()->can(Permission::ACTION_FILE_CREATE, $server))
|
||||
->label('Upload')
|
||||
->action(function ($data) use ($server) {
|
||||
->action(function ($data, DaemonFileRepository $fileRepository) use ($server) {
|
||||
if (count($data['files']) > 0 && !isset($data['url'])) {
|
||||
/** @var UploadedFile $file */
|
||||
foreach ($data['files'] as $file) {
|
||||
// @phpstan-ignore-next-line
|
||||
app(DaemonFileRepository::class)
|
||||
$fileRepository
|
||||
->setServer($server)
|
||||
->putContent(join_paths($this->path, $file->getClientOriginalName()), $file->getContent());
|
||||
|
||||
@ -500,8 +487,7 @@ class ListFiles extends ListRecords
|
||||
->log();
|
||||
}
|
||||
} elseif ($data['url'] !== null) {
|
||||
// @phpstan-ignore-next-line
|
||||
app(DaemonFileRepository::class)
|
||||
$fileRepository
|
||||
->setServer($server)
|
||||
->pull($data['url'], $this->path);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user