From 74f651a8a0ccbaad5666d75ded2d84001abc5331 Mon Sep 17 00:00:00 2001 From: Dan Harrin Date: Thu, 12 Jun 2025 15:55:09 +0100 Subject: [PATCH] fix: Windows import file validation --- .../actions/src/Concerns/CanImportRecords.php | 65 +++++++++---------- 1 file changed, 31 insertions(+), 34 deletions(-) diff --git a/packages/actions/src/Concerns/CanImportRecords.php b/packages/actions/src/Concerns/CanImportRecords.php index 8d4dabde74..af9f8114dc 100644 --- a/packages/actions/src/Concerns/CanImportRecords.php +++ b/packages/actions/src/Concerns/CanImportRecords.php @@ -30,7 +30,6 @@ use Illuminate\Support\Facades\Bus; use Illuminate\Support\Facades\Storage; use Illuminate\Support\Number; use Illuminate\Support\Str; -use Illuminate\Validation\Rules\File; use Illuminate\Validation\ValidationException; use League\Csv\Bom; use League\Csv\CharsetConverter; @@ -616,45 +615,43 @@ trait CanImportRecords { $fileRules = [ 'extensions:csv,txt', - File::types(['csv', 'txt'])->rules([ - function (string $attribute, mixed $value, Closure $fail) { - $csvStream = $this->getUploadedFileStream($value); + function (string $attribute, mixed $value, Closure $fail) { + $csvStream = $this->getUploadedFileStream($value); - if (! $csvStream) { - return; + if (! $csvStream) { + return; + } + + $csvReader = CsvReader::createFromStream($csvStream); + + if (filled($csvDelimiter = $this->getCsvDelimiter($csvReader))) { + $csvReader->setDelimiter($csvDelimiter); + } + + $csvReader->setHeaderOffset($this->getHeaderOffset() ?? 0); + + $csvColumns = $csvReader->getHeader(); + + $duplicateCsvColumns = []; + + foreach (array_count_values($csvColumns) as $header => $count) { + if ($count <= 1) { + continue; } - $csvReader = CsvReader::createFromStream($csvStream); + $duplicateCsvColumns[] = $header; + } - if (filled($csvDelimiter = $this->getCsvDelimiter($csvReader))) { - $csvReader->setDelimiter($csvDelimiter); - } + if (empty($duplicateCsvColumns)) { + return; + } - $csvReader->setHeaderOffset($this->getHeaderOffset() ?? 0); + $filledDuplicateCsvColumns = array_filter($duplicateCsvColumns, fn ($value): bool => filled($value)); - $csvColumns = $csvReader->getHeader(); - - $duplicateCsvColumns = []; - - foreach (array_count_values($csvColumns) as $header => $count) { - if ($count <= 1) { - continue; - } - - $duplicateCsvColumns[] = $header; - } - - if (empty($duplicateCsvColumns)) { - return; - } - - $filledDuplicateCsvColumns = array_filter($duplicateCsvColumns, fn ($value): bool => filled($value)); - - $fail(trans_choice('filament-actions::import.modal.form.file.rules.duplicate_columns', count($filledDuplicateCsvColumns), [ - 'columns' => implode(', ', $filledDuplicateCsvColumns), - ])); - }, - ]), + $fail(trans_choice('filament-actions::import.modal.form.file.rules.duplicate_columns', count($filledDuplicateCsvColumns), [ + 'columns' => implode(', ', $filledDuplicateCsvColumns), + ])); + }, ]; foreach ($this->fileValidationRules as $rules) {