Move column deserialization to ColumnChooser

This commit is contained in:
Bastian Lederer 2026-03-30 14:11:32 +02:00
parent 31a24f3e8c
commit 6fa19e6f7b
2 changed files with 29 additions and 23 deletions

View file

@ -23,11 +23,27 @@ class ColumnChooser extends CompatForm
/** @var Resolver The resolver used to validate column names and get their labels */
protected Resolver $resolver;
public function __construct(Url $suggestionUrl, Resolver $resolver, array $columns = [])
/**
* Create a new ColumnChooser
*
* @param Url $suggestionUrl URL to fetch column suggestions from
* @param Resolver $resolver Resolver to validate column names and get their labels
* @param string|array $columns A string of comma separated columns or an array of columns
*/
public function __construct(Url $suggestionUrl, Resolver $resolver, string|array $columns = [])
{
if (is_string($columns)) {
foreach (explode(',', $columns) as $column) {
if ($column = trim($column)) {
$this->columns[] = $column;
}
}
} else {
$this->columns = $columns;
}
$this->suggestionUrl = $suggestionUrl;
$this->resolver = $resolver;
$this->columns = $columns;
}
public function getColumns(): array

View file

@ -92,26 +92,8 @@ class Controller extends CompatController
array $defaultColumns,
Url $redirectUrl
): ColumnChooser {
$columnsDef = $this->params->shift('columns');
if (! $columnsDef) {
$columns = $defaultColumns;
} else {
$columns = [];
foreach (explode(',', $columnsDef) as $column) {
if ($column = trim($column)) {
$columns[] = $column;
}
}
}
// When exporting as CSV or JSON, and the user requested specific columns, only those should be included
if ($this->format === 'csv' || $this->format === 'json') {
$query->columns($columns);
} else {
$query->withColumns($columns);
}
return (new ColumnChooser($suggestionUrl, $query->getResolver(), $columns))
$columnsDef = $this->params->shift('columns', $defaultColumns);
$chooser = (new ColumnChooser($suggestionUrl, $query->getResolver(), $columnsDef))
->setAction((string) Url::fromRequest())
->on(ColumnChooser::ON_SENT, function (ColumnChooser $form) use ($redirectUrl) {
if ($form->hasBeenSubmitted()) {
@ -122,11 +104,19 @@ class Controller extends CompatController
if (! is_array($update)) {
$update = [$update];
}
$this->addPart(...$update);
}
}
});
// When exporting as CSV or JSON, and the user requested specific columns, only those should be included
if ($this->format === 'csv' || $this->format === 'json') {
$query->columns($chooser->getColumns());
} else {
$query->withColumns($chooser->getColumns());
}
return $chooser;
}
/**