prune sensitive data from failed_import_rows data

This commit is contained in:
Mark Chaney
2024-08-25 23:56:43 -04:00
parent 82b76f276d
commit db5f75406c
2 changed files with 34 additions and 1 deletions
@@ -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);
}
}
@@ -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)) {