TableWithBranchSupport: new trait

This commit is contained in:
Thomas Gelf 2022-08-29 21:44:21 +02:00
parent 0f2045c8f6
commit d433631174
2 changed files with 51 additions and 41 deletions

View File

@ -14,11 +14,12 @@ use gipfl\IcingaWeb2\Link;
use gipfl\IcingaWeb2\Table\ZfQueryBasedTable; use gipfl\IcingaWeb2\Table\ZfQueryBasedTable;
use gipfl\IcingaWeb2\Url; use gipfl\IcingaWeb2\Url;
use Ramsey\Uuid\Uuid; use Ramsey\Uuid\Uuid;
use Ramsey\Uuid\UuidInterface;
use Zend_Db_Select as ZfSelect; use Zend_Db_Select as ZfSelect;
class ObjectsTable extends ZfQueryBasedTable class ObjectsTable extends ZfQueryBasedTable
{ {
use TableWithBranchSupport;
/** @var ObjectRestriction[] */ /** @var ObjectRestriction[] */
protected $objectRestrictions; protected $objectRestrictions;
@ -37,9 +38,6 @@ class ObjectsTable extends ZfQueryBasedTable
protected $type; protected $type;
/** @var UuidInterface|null */
protected $branchUuid;
protected $baseObjectUrl; protected $baseObjectUrl;
/** @var IcingaObject */ /** @var IcingaObject */
@ -112,13 +110,6 @@ class ObjectsTable extends ZfQueryBasedTable
return $this; return $this;
} }
public function setBranchUuid(UuidInterface $uuid = null)
{
$this->branchUuid = $uuid;
return $this;
}
public function getColumns() public function getColumns()
{ {
return $this->columns; return $this->columns;
@ -256,36 +247,6 @@ class ObjectsTable extends ZfQueryBasedTable
return $this->dummyObject; return $this->dummyObject;
} }
protected function branchifyColumns($columns)
{
$result = [
'uuid' => 'COALESCE(o.uuid, bo.uuid)'
];
$ignore = ['o.id'];
foreach ($columns as $alias => $column) {
if (substr($column, 0, 2) === 'o.' && ! in_array($column, $ignore)) {
// bo.column, o.column
$column = "COALESCE(b$column, $column)";
}
// Used in Service Tables:
if ($column === 'h.object_name' && $alias = 'host') {
$column = "COALESCE(bo.host, $column)";
}
$result[$alias] = $column;
}
return $result;
}
protected function stripSearchColumnAliases()
{
foreach ($this->searchColumns as &$column) {
$column = preg_replace('/^[a-z]+\./', '', $column);
}
}
protected function prepareQuery() protected function prepareQuery()
{ {
$table = $this->getDummyObject()->getTableName(); $table = $this->getDummyObject()->getTableName();

View File

@ -0,0 +1,49 @@
<?php
namespace Icinga\Module\Director\Web\Table;
use Ramsey\Uuid\UuidInterface;
trait TableWithBranchSupport
{
/** @var UuidInterface|null */
protected $branchUuid;
public function setBranchUuid(UuidInterface $uuid = null)
{
$this->branchUuid = $uuid;
return $this;
}
protected function branchifyColumns($columns)
{
$result = [
'uuid' => 'COALESCE(o.uuid, bo.uuid)'
];
$ignore = ['o.id'];
foreach ($columns as $alias => $column) {
if (substr($column, 0, 2) === 'o.' && ! in_array($column, $ignore)) {
// bo.column, o.column
$column = "COALESCE(b$column, $column)";
}
// Used in Service Tables:
if ($column === 'h.object_name' && $alias = 'host') {
$column = "COALESCE(bo.host, $column)";
}
$result[$alias] = $column;
}
return $result;
}
protected function stripSearchColumnAliases()
{
foreach ($this->searchColumns as &$column) {
$column = preg_replace('/^[a-z]+\./', '', $column);
}
}
}