mirror of
https://github.com/Icinga/icingaweb2.git
synced 2025-08-19 00:38:17 +02:00
Repository: Recurse a filter in the repository instead of in the query
This allows to recurse and adjust a filter outside the query context as well refs #8826
This commit is contained in:
parent
5ace0a08f3
commit
938da806ca
@ -4,6 +4,7 @@
|
||||
namespace Icinga\Repository;
|
||||
|
||||
use Icinga\Application\Logger;
|
||||
use Icinga\Data\Filter\Filter;
|
||||
use Icinga\Data\Selectable;
|
||||
use Icinga\Exception\ProgrammingError;
|
||||
use Icinga\Exception\QueryException;
|
||||
@ -471,6 +472,24 @@ abstract class Repository implements Selectable
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Recurse the given filter, require each filter column and convert all values
|
||||
*
|
||||
* @param Filter $filter
|
||||
*/
|
||||
public function requireFilter(Filter $filter)
|
||||
{
|
||||
if ($filter->isExpression()) {
|
||||
$column = $filter->getColumn();
|
||||
$filter->setColumn($this->requireFilterColumn($column));
|
||||
$filter->setExpression($this->persistColumn($column, $filter->getExpression()));
|
||||
} elseif ($filter->isChain()) {
|
||||
foreach ($filter->filters() as $chainOrExpression) {
|
||||
$this->requireFilter($chainOrExpression);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return this repository's query columns mapped to their respective aliases
|
||||
*
|
||||
|
@ -164,7 +164,7 @@ class RepositoryQuery implements QueryInterface
|
||||
*/
|
||||
public function setFilter(Filter $filter)
|
||||
{
|
||||
$this->requireFilterColumns($filter);
|
||||
$this->repository->requireFilter($filter);
|
||||
$this->query->setFilter($filter);
|
||||
return $this;
|
||||
}
|
||||
@ -180,27 +180,11 @@ class RepositoryQuery implements QueryInterface
|
||||
*/
|
||||
public function addFilter(Filter $filter)
|
||||
{
|
||||
$this->requireFilterColumns($filter);
|
||||
$this->repository->requireFilter($filter);
|
||||
$this->query->addFilter($filter);
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Recurse the given filter and notify the repository about each required filter column
|
||||
*/
|
||||
protected function requireFilterColumns(Filter $filter)
|
||||
{
|
||||
if ($filter->isExpression()) {
|
||||
$column = $filter->getColumn();
|
||||
$filter->setColumn($this->repository->requireFilterColumn($column));
|
||||
$filter->setExpression($this->repository->persistColumn($column, $filter->getExpression()));
|
||||
} elseif ($filter->isChain()) {
|
||||
foreach ($filter->filters() as $chainOrExpression) {
|
||||
$this->requireFilterColumns($chainOrExpression);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the current filter
|
||||
*
|
||||
|
Loading…
x
Reference in New Issue
Block a user