From 91c24cb31398665231530985eafdeca0fdaf4214 Mon Sep 17 00:00:00 2001 From: Elisha Witte Date: Tue, 24 Aug 2021 17:34:13 +0200 Subject: [PATCH 1/4] Allow specifying file name for uploaded files --- .../forms/src/Concerns/CanUploadFiles.php | 14 ++++++++-- src/Resources/Forms/Components/FileUpload.php | 9 +++++++ src/Resources/Forms/HasForm.php | 26 +++++++++++++++++++ 3 files changed, 47 insertions(+), 2 deletions(-) diff --git a/packages/forms/src/Concerns/CanUploadFiles.php b/packages/forms/src/Concerns/CanUploadFiles.php index c3f1308ee9..12538e8129 100644 --- a/packages/forms/src/Concerns/CanUploadFiles.php +++ b/packages/forms/src/Concerns/CanUploadFiles.php @@ -4,6 +4,7 @@ namespace Filament\Forms\Concerns; use Filament\Forms\Components\Field; use Filament\Forms\Components\FileUpload; +use Illuminate\Http\UploadedFile; use Illuminate\Support\Facades\Storage; use Illuminate\Support\Str; use Illuminate\Validation\ValidationException; @@ -83,8 +84,7 @@ trait CanUploadFiles continue; } - $storeMethod = $field->getVisibility() === 'public' ? 'storePublicly' : 'store'; - $path = $temporaryUploadedFile->{$storeMethod}($field->getDirectory(), $field->getDiskName()); + $path = $this->storeFile($temporaryUploadedFile, $field); $this->syncInput($field->getName(), $path, false); } @@ -134,4 +134,14 @@ trait CanUploadFiles throw $exception; } } + + /** + * Store the given $file for the given $field in storage. + */ + protected function storeFile(UploadedFile $file, FileUpload $field): string + { + $storeMethod = $field->getVisibility() === 'public' ? 'storePublicly' : 'store'; + + return $file->{$storeMethod}($field->getDirectory(), $field->getDiskName()); + } } diff --git a/src/Resources/Forms/Components/FileUpload.php b/src/Resources/Forms/Components/FileUpload.php index d867d47c45..416138d37d 100644 --- a/src/Resources/Forms/Components/FileUpload.php +++ b/src/Resources/Forms/Components/FileUpload.php @@ -5,4 +5,13 @@ namespace Filament\Resources\Forms\Components; class FileUpload extends \Filament\Forms\Components\FileUpload { use Concerns\InteractsWithResource; + + public $storeAsCallback; + + public function storeAs(callable $storeAsCallback) + { + $this->storeAsCallback = $storeAsCallback; + + return $this; + } } diff --git a/src/Resources/Forms/HasForm.php b/src/Resources/Forms/HasForm.php index 64a6f9cfa7..3775bb156e 100644 --- a/src/Resources/Forms/HasForm.php +++ b/src/Resources/Forms/HasForm.php @@ -2,6 +2,11 @@ namespace Filament\Resources\Forms; +use Filament\Resources\Forms\Components\FileUpload; +use Illuminate\Database\Eloquent\Model; +use Illuminate\Http\UploadedFile; +use Symfony\Component\HttpFoundation\ParameterBag; + trait HasForm { use \Filament\Forms\HasForm; @@ -27,4 +32,25 @@ trait HasForm { return $form; } + + /** + * Store the given $file for the given $field in storage. + */ + protected function storeFile(UploadedFile $file, FileUpload $field): string + { + $storeMethod = $field->getVisibility() === 'public' ? 'storePublicly' : 'store'; + + if (! $field->getStoreAsCallback() || ! ($field->getLivewire()->record)) { + return $file->{$storeMethod}($field->getDirectory(), $field->getDiskName()); + } + + $record = $field->getLivewire()->record; + $input = new ParameterBag($record instanceof Model ? $record->attributesToArray() : $record); + + return $file->{$storeMethod.'As'}( + $field->getDirectory(), + call_user_func($field->storeAsCallback, $file, $input), + $field->getDiskName() + ); + } } From 5ae5d0e843a9542563f5192d7317ba803447a17f Mon Sep 17 00:00:00 2001 From: Elisha Witte Date: Tue, 24 Aug 2021 17:51:52 +0200 Subject: [PATCH 2/4] Fix bad method call --- src/Resources/Forms/HasForm.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Resources/Forms/HasForm.php b/src/Resources/Forms/HasForm.php index 3775bb156e..bdba917d46 100644 --- a/src/Resources/Forms/HasForm.php +++ b/src/Resources/Forms/HasForm.php @@ -40,7 +40,7 @@ trait HasForm { $storeMethod = $field->getVisibility() === 'public' ? 'storePublicly' : 'store'; - if (! $field->getStoreAsCallback() || ! ($field->getLivewire()->record)) { + if (! $field->storeAsCallback || ! ($field->getLivewire()->record)) { return $file->{$storeMethod}($field->getDirectory(), $field->getDiskName()); } From 67fc0c61af574ac72436704f21d93712bdf84162 Mon Sep 17 00:00:00 2001 From: Elisha Witte Date: Tue, 31 Aug 2021 10:02:09 +0200 Subject: [PATCH 3/4] Remove filename logic --- src/Resources/Forms/Components/FileUpload.php | 9 ------- src/Resources/Forms/HasForm.php | 26 ------------------- 2 files changed, 35 deletions(-) diff --git a/src/Resources/Forms/Components/FileUpload.php b/src/Resources/Forms/Components/FileUpload.php index 416138d37d..d867d47c45 100644 --- a/src/Resources/Forms/Components/FileUpload.php +++ b/src/Resources/Forms/Components/FileUpload.php @@ -5,13 +5,4 @@ namespace Filament\Resources\Forms\Components; class FileUpload extends \Filament\Forms\Components\FileUpload { use Concerns\InteractsWithResource; - - public $storeAsCallback; - - public function storeAs(callable $storeAsCallback) - { - $this->storeAsCallback = $storeAsCallback; - - return $this; - } } diff --git a/src/Resources/Forms/HasForm.php b/src/Resources/Forms/HasForm.php index bdba917d46..64a6f9cfa7 100644 --- a/src/Resources/Forms/HasForm.php +++ b/src/Resources/Forms/HasForm.php @@ -2,11 +2,6 @@ namespace Filament\Resources\Forms; -use Filament\Resources\Forms\Components\FileUpload; -use Illuminate\Database\Eloquent\Model; -use Illuminate\Http\UploadedFile; -use Symfony\Component\HttpFoundation\ParameterBag; - trait HasForm { use \Filament\Forms\HasForm; @@ -32,25 +27,4 @@ trait HasForm { return $form; } - - /** - * Store the given $file for the given $field in storage. - */ - protected function storeFile(UploadedFile $file, FileUpload $field): string - { - $storeMethod = $field->getVisibility() === 'public' ? 'storePublicly' : 'store'; - - if (! $field->storeAsCallback || ! ($field->getLivewire()->record)) { - return $file->{$storeMethod}($field->getDirectory(), $field->getDiskName()); - } - - $record = $field->getLivewire()->record; - $input = new ParameterBag($record instanceof Model ? $record->attributesToArray() : $record); - - return $file->{$storeMethod.'As'}( - $field->getDirectory(), - call_user_func($field->storeAsCallback, $file, $input), - $field->getDiskName() - ); - } } From 6a21fcea117130cd4bc5824563eff69e22ba6028 Mon Sep 17 00:00:00 2001 From: Dan Harrin Date: Tue, 31 Aug 2021 10:14:41 +0100 Subject: [PATCH 4/4] formatting --- packages/forms/src/Concerns/CanUploadFiles.php | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/packages/forms/src/Concerns/CanUploadFiles.php b/packages/forms/src/Concerns/CanUploadFiles.php index 12538e8129..4edbb6e112 100644 --- a/packages/forms/src/Concerns/CanUploadFiles.php +++ b/packages/forms/src/Concerns/CanUploadFiles.php @@ -135,10 +135,7 @@ trait CanUploadFiles } } - /** - * Store the given $file for the given $field in storage. - */ - protected function storeFile(UploadedFile $file, FileUpload $field): string + protected function storeFile(UploadedFile $file, FileUpload $field) { $storeMethod = $field->getVisibility() === 'public' ? 'storePublicly' : 'store';