mirror of
https://github.com/filamentphp/filament.git
synced 2026-09-24 15:42:09 +08:00
fix: Windows import file validation
This commit is contained in:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user