mirror of
https://github.com/Icinga/icingadb-web.git
synced 2026-05-28 04:36:06 -04:00
FlattenedObjectVars: Support selecting custom variables as columns
This commit is contained in:
parent
462af082d7
commit
ec0815a9aa
1 changed files with 49 additions and 2 deletions
|
|
@ -4,11 +4,29 @@
|
|||
|
||||
namespace Icinga\Module\Icingadb\Model\Behavior;
|
||||
|
||||
use ipl\Orm\Contract\RewriteFilterBehavior;
|
||||
use Icinga\Module\Icingadb\Common\Auth;
|
||||
use Icinga\Module\Icingadb\Model\CustomvarFlat;
|
||||
use ipl\Orm\AliasedExpression;
|
||||
use ipl\Orm\ColumnDefinition;
|
||||
use ipl\Orm\Contract\QueryAwareBehavior;
|
||||
use ipl\Orm\Contract\RewriteColumnBehavior;
|
||||
use ipl\Orm\Query;
|
||||
use ipl\Stdlib\Filter;
|
||||
|
||||
class FlattenedObjectVars implements RewriteFilterBehavior
|
||||
class FlattenedObjectVars implements RewriteColumnBehavior, QueryAwareBehavior
|
||||
{
|
||||
use Auth;
|
||||
|
||||
/** @var Query */
|
||||
protected $query;
|
||||
|
||||
public function setQuery(Query $query)
|
||||
{
|
||||
$this->query = $query;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function rewriteCondition(Filter\Condition $condition, $relation = null)
|
||||
{
|
||||
$column = $condition->metaData()->get('columnName');
|
||||
|
|
@ -21,4 +39,33 @@ class FlattenedObjectVars implements RewriteFilterBehavior
|
|||
return Filter::all($nameFilter, $valueFilter);
|
||||
}
|
||||
}
|
||||
|
||||
public function rewriteColumn($column, $relation = null)
|
||||
{
|
||||
$subQuery = $this->query->createSubQuery(new CustomvarFlat(), $relation)
|
||||
->limit(1)
|
||||
->columns('flatvalue')
|
||||
->filter(Filter::equal('flatname', $column));
|
||||
|
||||
$this->applyRestrictions($subQuery);
|
||||
|
||||
$alias = $this->query->getDb()->quoteIdentifier([str_replace('.', '_', $relation) . "_$column"]);
|
||||
|
||||
list($select, $values) = $this->query->getDb()->getQueryBuilder()->assembleSelect($subQuery->assembleSelect());
|
||||
return new AliasedExpression($alias, "($select)", null, ...$values);
|
||||
}
|
||||
|
||||
public function rewriteColumnDefinition(ColumnDefinition $def, string $relation): void
|
||||
{
|
||||
$parts = explode('.', substr($relation, 0, -5));
|
||||
$objectType = array_pop($parts);
|
||||
|
||||
// Programmatically translated since the full definition is available in class ObjectSuggestions
|
||||
$def->setLabel(sprintf(t(ucfirst($objectType) . ' %s', '..<customvar-name>'), $def->getName()));
|
||||
}
|
||||
|
||||
public function isSelectableColumn(string $name): bool
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue