mirror of
https://github.com/Icinga/icingadb-web.git
synced 2026-06-09 00:32:05 -04:00
Move column deserialization to ColumnChooser
This commit is contained in:
parent
31a24f3e8c
commit
6fa19e6f7b
2 changed files with 29 additions and 23 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Reference in a new issue