diff --git a/packages/actions/src/Imports/ImportColumn.php b/packages/actions/src/Imports/ImportColumn.php index 4518dc54b3..eaddbb002f 100644 --- a/packages/actions/src/Imports/ImportColumn.php +++ b/packages/actions/src/Imports/ImportColumn.php @@ -78,6 +78,8 @@ class ImportColumn extends Component protected string | Htmlable | Closure | null $helperText = null; + protected bool | Closure $isSensitive = false; + final public function __construct(string $name) { $this->name($name); @@ -606,4 +608,16 @@ class ImportColumn extends Component default => parent::resolveDefaultClosureDependencyForEvaluationByType($parameterType), }; } + + public function sensitive(bool | Closure $condition = true): static + { + $this->isSensitive = $condition; + + return $this; + } + + public function isSensitive(): bool + { + return (bool) $this->evaluate($this->isSensitive); + } } diff --git a/packages/actions/src/Imports/Jobs/ImportCsv.php b/packages/actions/src/Imports/Jobs/ImportCsv.php index 43424b779a..7a96eb4c43 100644 --- a/packages/actions/src/Imports/Jobs/ImportCsv.php +++ b/packages/actions/src/Imports/Jobs/ImportCsv.php @@ -143,11 +143,30 @@ class ImportCsv implements ShouldQueue { $failedRow = app(FailedImportRow::class); $failedRow->import()->associate($this->import); - $failedRow->data = $data; + $failedRow->data = $this->filterSensitiveData($data, $this->columnMap); + $failedRow->validation_error = $validationError; $failedRow->save(); } + protected function filterSensitiveData(array $data, array $columnMap): array + { + $sensitiveColumns = []; + + foreach ($this->importer->getColumns() as $column) { + if ($column->isSensitive()) { + $csvHeader = $columnMap[$column->getName()] ?? null; + if ($csvHeader !== null) { + $sensitiveColumns[] = $csvHeader; + } + } + } + + return array_filter($data, function ($key) use ($sensitiveColumns) { + return ! in_array($key, $sensitiveColumns, true); + }, ARRAY_FILTER_USE_KEY); + } + protected function utf8Encode(mixed $value): mixed { if (is_array($value)) {