diff --git a/app/Filament/Clusters/VisaMasterPayments/Resources/VisaMasterPaymentOrders/Schemas/VisaMasterPaymentOrderForm.php b/app/Filament/Clusters/VisaMasterPayments/Resources/VisaMasterPaymentOrders/Schemas/VisaMasterPaymentOrderForm.php index f9b2dd3..083b3df 100644 --- a/app/Filament/Clusters/VisaMasterPayments/Resources/VisaMasterPaymentOrders/Schemas/VisaMasterPaymentOrderForm.php +++ b/app/Filament/Clusters/VisaMasterPayments/Resources/VisaMasterPaymentOrders/Schemas/VisaMasterPaymentOrderForm.php @@ -147,10 +147,15 @@ class VisaMasterPaymentOrderForm ->columnSpanFull() ->columns(2) ->schema([ - SpatieMediaLibraryFileUpload::make('sender_passport_local') + AdvancedFileUpload::make('sender_passport_local') ->collection('sender_passport_local') - ->label(__('Ugradyja degişli Türkmenistanyň raýatynyň (içki milli) pasportynyň asyl görnüşi we göçürmesi')) - ->required(), + ->spatieMediaLibrary() + ->multiple(), + + // SpatieMediaLibraryFileUpload::make('sender_passport_local') + // ->collection('sender_passport_local') + // ->label(__('Ugradyja degişli Türkmenistanyň raýatynyň (içki milli) pasportynyň asyl görnüşi we göçürmesi')) + // ->required(), SpatieMediaLibraryFileUpload::make('sender_passport_international') ->collection('sender_passport_international') diff --git a/app/Filament/Clusters/VisaMasterPayments/Resources/VisaMasterPaymentOrders/Schemas/VisaMasterPaymentOrderInfolist.php b/app/Filament/Clusters/VisaMasterPayments/Resources/VisaMasterPaymentOrders/Schemas/VisaMasterPaymentOrderInfolist.php index d706dee..fcec190 100644 --- a/app/Filament/Clusters/VisaMasterPayments/Resources/VisaMasterPaymentOrders/Schemas/VisaMasterPaymentOrderInfolist.php +++ b/app/Filament/Clusters/VisaMasterPayments/Resources/VisaMasterPaymentOrders/Schemas/VisaMasterPaymentOrderInfolist.php @@ -7,7 +7,7 @@ use App\Modules\Region\Repositories\RegionRepository; use App\Modules\TurkmenPassport\Repositories\TurkmenPassportRepository; use App\Modules\VisaMasterPaymentOrder\Models\VisaMasterPaymentOrder; use Filament\Infolists\Components\IconEntry; -use Filament\Infolists\Components\SpatieMediaLibraryImageEntry; +use App\Filament\Infolists\Components\SpatieMediaLibraryFileEntry; use Filament\Infolists\Components\TextEntry; use Filament\Schemas\Components\Fieldset; use Filament\Schemas\Components\Section; @@ -114,27 +114,27 @@ class VisaMasterPaymentOrderInfolist ->columnSpanFull() ->columns(2) ->schema([ - SpatieMediaLibraryImageEntry::make('sender_passport_local') + SpatieMediaLibraryFileEntry::make('sender_passport_local') ->collection('sender_passport_local') ->label(__('Ugradyja degişli Türkmenistanyň raýatynyň (içki milli) pasportynyň asyl görnüşi we göçürmesi')), - SpatieMediaLibraryImageEntry::make('sender_passport_international') + SpatieMediaLibraryFileEntry::make('sender_passport_international') ->collection('sender_passport_international') ->label(__('Ugradyja degişli Türkmenistandan çykmak we Türkmenistana girmek üçin pasportynyň asyl görnüşi we göçürmesi')), - SpatieMediaLibraryImageEntry::make('sender_travel_stamp_on_passport') + SpatieMediaLibraryFileEntry::make('sender_travel_stamp_on_passport') ->collection('sender_travel_stamp_on_passport') ->label(__('Ugradyja degişli Türkmenistandan çykmak we Türkmenistana girmek üçin pasportyndaky daşary döwletine gidendigi we daşary döwlete barandygy baradaky (ştampyň) bellenen sahypasynyň göçürmesi')), - SpatieMediaLibraryImageEntry::make('sender_proof_of_kinship') + SpatieMediaLibraryFileEntry::make('sender_proof_of_kinship') ->collection('sender_proof_of_kinship') ->label(__('Ugradyjynyň we kabul edijiniň (talybyň) özara garyndaşlyk derejesini tassyklaýjy resminamalarynyň göçürmesi')), - SpatieMediaLibraryImageEntry::make('sender_passport_local_old') + SpatieMediaLibraryFileEntry::make('sender_passport_local_old') ->collection('sender_passport_local_old') ->label(__('Ugradyjy we kabul ediji (talyp) 2015-nji ýyldan soňra Türkmenistanyň raýatynyň pasportyny ikinji gezek alan bolsa, onda birinji gezek alan pasportynyň seriýasy baradaky maglumat')), - SpatieMediaLibraryImageEntry::make('sender_passport_local_old_replacement') + SpatieMediaLibraryFileEntry::make('sender_passport_local_old_replacement') ->collection('sender_passport_local_old_replacement') ->label(__('Ugradyjy we kabul ediji (talyp) 2015-nji ýyldan soňra Türkmenistanyň raýatynyň pasportyny ikinji gezek alandan soňra birinji gezek alan pasportynyň seriýasy baradaky maglumaty bilmeýän ,bolsa onda polisiýanyň degişli edaralaryndan birinji alan pasportynyň seriýasy baradaky güwänamasy')), ]), @@ -163,42 +163,42 @@ class VisaMasterPaymentOrderInfolist ->columnSpanFull() ->columns(2) ->schema([ - SpatieMediaLibraryImageEntry::make('receiver_requisite') + SpatieMediaLibraryFileEntry::make('receiver_requisite') ->collection('receiver_requisite') ->label(__('Talyba degişli walýuta "VISA" kartyň rekwizitleri')) ->columnSpan(1), - SpatieMediaLibraryImageEntry::make('receiver_document_stating_he_is_studying') + SpatieMediaLibraryFileEntry::make('receiver_document_stating_he_is_studying') ->collection('receiver_document_stating_he_is_studying') ->label(__('Talybyň daşary ýurt döwletiniň ýokary okuw mekdebinde okaýandygy baradaky güwänamasy')) ->columnSpan(1), - SpatieMediaLibraryImageEntry::make('receiver_ticket') + SpatieMediaLibraryFileEntry::make('receiver_ticket') ->collection('receiver_ticket') ->label(__('Talybyň bilediniň göçürmesi')) ->columnSpan(1), - SpatieMediaLibraryImageEntry::make('receiver_passport_local') + SpatieMediaLibraryFileEntry::make('receiver_passport_local') ->collection('receiver_passport_local') ->label(__('Talyba degişli Türkmenistanyň raýatynyň (içki milli) pasportynyň asyl görnüşi we göçürmesi')) ->columnSpan(1), - SpatieMediaLibraryImageEntry::make('receiver_passport_international') + SpatieMediaLibraryFileEntry::make('receiver_passport_international') ->collection('receiver_passport_international') ->label(__('Talybyň Türkmenistandan çykmak we Türkmenistana girmek üçin (zagran) pasportynyň göçürmesi')) ->columnSpan(1), - SpatieMediaLibraryImageEntry::make('receiver_visa') + SpatieMediaLibraryFileEntry::make('receiver_visa') ->collection('receiver_visa') ->label(__('Talybyň Türkmenistandan çykmak we Türkmenistana girmek üçin pasportyndaky daşary ýurtda galyp okap bilýändigi baradaky berlen möhleti hereket edýän rugsatnamasynyň (wizasynyň) bellenen sahypasynyň göçürmesi')) ->columnSpan(1), - SpatieMediaLibraryImageEntry::make('receiver_travel_stamp_on_passport') + SpatieMediaLibraryFileEntry::make('receiver_travel_stamp_on_passport') ->collection('receiver_travel_stamp_on_passport') ->label(__('Talybyň Türkmenistandan çykmak we Türkmenistana girmek üçin pasportyndaky Türkmenistandan çykandygy we daşary ýurt döwletine girendigi baradaky ştamplaryň (seneli ştampyň) bellenen sahypasynyň göçürmesi')) ->columnSpan(1), - SpatieMediaLibraryImageEntry::make('receiver_document_stating_he_is_studying_2') + SpatieMediaLibraryFileEntry::make('receiver_document_stating_he_is_studying_2') ->collection('receiver_document_stating_he_is_studying_2') ->label(__('Talybyň daşary ýurt döwletiniň ýokary okuw mekdebinde okaýandygy baradaky güwänamasyndaky maglumatyň doly takyk däl ýagdaýynda takyk däl maglumatyň sebäpleri baradaky daşary ýurt döwletiniň ýokary okuw mekdebinden haty')) ->columnSpan(1), diff --git a/app/Filament/Infolists/Components/SpatieMediaLibraryFileEntry.php b/app/Filament/Infolists/Components/SpatieMediaLibraryFileEntry.php new file mode 100644 index 0000000..f74525b --- /dev/null +++ b/app/Filament/Infolists/Components/SpatieMediaLibraryFileEntry.php @@ -0,0 +1,149 @@ +collection = $collection; + + return $this; + } + + public function conversion(string | Closure | null $conversion): static + { + $this->conversion = $conversion; + + return $this; + } + + public function visibility(string | Closure $visibility): static + { + $this->visibility = $visibility; + + return $this; + } + + public function downloadable(bool | Closure $condition = true): static + { + $this->isDownloadable = $condition; + + return $this; + } + + public function previewable(bool | Closure $condition = true): static + { + $this->isPreviewable = $condition; + + return $this; + } + + public function getCollection(): ?string + { + return $this->evaluate($this->collection); + } + + public function getConversion(): ?string + { + return $this->evaluate($this->conversion); + } + + public function getVisibility(): string + { + return $this->evaluate($this->visibility); + } + + public function isDownloadable(): bool + { + return (bool) $this->evaluate($this->isDownloadable); + } + + public function isPreviewable(): bool + { + return (bool) $this->evaluate($this->isPreviewable); + } + + public function getMediaUrl(Media $media, ?string $conversion = null): string + { + if ($this->getVisibility() === 'private') { + try { + return $media->getTemporaryUrl( + now()->addMinutes(30)->endOfHour(), + $conversion ?? '', + ); + } catch (Throwable $exception) { + // This driver does not support creating temporary URLs. + } + } + + return $media->getUrl($conversion ?? ''); + } + + public function getMedia(): Collection + { + $record = $this->getRecord(); + + if (! $record) { + return collect([]); + } + + if ($this->hasStateRelationship($record)) { + $record = $this->getStateRelationshipResults($record); + } + + $records = Arr::wrap($record); + + $allMedia = collect([]); + + $collection = $this->getCollection() ?? 'default'; + + foreach ($records as $record) { + /** @var Model $record */ + $media = $record->getRelationValue('media'); + + if (! $media) { + continue; + } + + $filteredMedia = $media + ->when( + is_string($collection), + fn (MediaCollection $mediaCollection) => $mediaCollection->filter(fn (Media $media): bool => $media->getAttributeValue('collection_name') === $collection), + ) + ->when( + $this->hasMediaFilter(), + fn (Collection $media) => $this->filterMedia($media) + ) + ->sortBy('order_column'); + + $allMedia = $allMedia->merge($filteredMedia); + } + + return $allMedia; + } +} diff --git a/app/Providers/Filament/WorkPanelProvider.php b/app/Providers/Filament/WorkPanelProvider.php index fb3c647..10c677d 100644 --- a/app/Providers/Filament/WorkPanelProvider.php +++ b/app/Providers/Filament/WorkPanelProvider.php @@ -22,6 +22,7 @@ use Illuminate\Routing\Middleware\SubstituteBindings; use Illuminate\Session\Middleware\StartSession; use Illuminate\View\Middleware\ShareErrorsFromSession; use Joaopaulolndev\FilamentEditProfile\FilamentEditProfilePlugin; +use RalphJSmit\Filament\Upload\FilamentUpload; class WorkPanelProvider extends PanelProvider { @@ -71,6 +72,8 @@ class WorkPanelProvider extends PanelProvider ->customProfileComponents([ UserProfileFields::class, ]), + + FilamentUpload::make(), ]) ->authMiddleware([ Authenticate::class, diff --git a/resources/views/filament/infolists/components/spatie-media-library-file-entry.blade.php b/resources/views/filament/infolists/components/spatie-media-library-file-entry.blade.php new file mode 100644 index 0000000..f0eb5a2 --- /dev/null +++ b/resources/views/filament/infolists/components/spatie-media-library-file-entry.blade.php @@ -0,0 +1,90 @@ + + @php + $media = $getMedia(); + $hasImagesOnly = $media->every(fn($m) => str_starts_with($m->mime_type, 'image/')); + @endphp + + @if ($media->isEmpty()) +
+ {{ __('No files uploaded') }} +
+ @elseif ($hasImagesOnly) +
$media->count() > 1, + ]) + > + @foreach ($media as $medium) +
+ + + + +
+ @endforeach +
+ @else +
+ @foreach ($getMedia() as $media) +
+
+ @if (str_starts_with($media->mime_type, 'image/')) + {{ $media->name }} + @else +
+ +
+ @endif +
+ +
+

+ {{ $media->name }} +

+

+ {{ $media->human_readable_size }} + + {{ $media->extension }} +

+
+ +
+ @if ($isPreviewable()) + + + + @endif +
+
+ @endforeach +
+ @endif +