mirror of
https://github.com/Icinga/icingaweb2-module-director.git
synced 2025-07-31 01:34:12 +02:00
ServiceController: refactor loading for related...
...objects refs #2452
This commit is contained in:
parent
36babe65f7
commit
c487a8b447
@ -4,6 +4,7 @@ namespace Icinga\Module\Director\Controllers;
|
|||||||
|
|
||||||
use Exception;
|
use Exception;
|
||||||
use Icinga\Module\Director\Data\Db\DbObjectStore;
|
use Icinga\Module\Director\Data\Db\DbObjectStore;
|
||||||
|
use Icinga\Module\Director\Data\Db\DbObjectTypeRegistry;
|
||||||
use Icinga\Module\Director\Db\Branch\UuidLookup;
|
use Icinga\Module\Director\Db\Branch\UuidLookup;
|
||||||
use Icinga\Module\Director\Forms\IcingaServiceForm;
|
use Icinga\Module\Director\Forms\IcingaServiceForm;
|
||||||
use Icinga\Module\Director\Monitoring;
|
use Icinga\Module\Director\Monitoring;
|
||||||
@ -40,44 +41,56 @@ class ServiceController extends ObjectController
|
|||||||
public function init()
|
public function init()
|
||||||
{
|
{
|
||||||
// Hint: having Host and Set loaded first is important for UUID lookups with legacy URLs
|
// Hint: having Host and Set loaded first is important for UUID lookups with legacy URLs
|
||||||
$this->loadOptionalHost();
|
$this->host = $this->getOptionalRelatedObjectFromParams('host', 'host');
|
||||||
$this->loadOptionalSet();
|
$this->set = $this->getOptionalRelatedObjectFromParams('service_set', 'set');
|
||||||
parent::init();
|
parent::init();
|
||||||
|
if ($this->object) {
|
||||||
|
if ($this->host === null) {
|
||||||
|
$this->host = $this->loadOptionalRelatedObject($this->object, 'host');
|
||||||
|
}
|
||||||
|
if ($this->set === null) {
|
||||||
|
$this->set = $this->loadOptionalRelatedObject($this->object, 'service_set');
|
||||||
|
}
|
||||||
|
}
|
||||||
$this->addOptionalHostTabs();
|
$this->addOptionalHostTabs();
|
||||||
$this->addOptionalSetTabs();
|
$this->addOptionalSetTabs();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function loadOptionalHost()
|
protected function getOptionalRelatedObjectFromParams($type, $parameter)
|
||||||
{
|
{
|
||||||
$host = $this->params->get('host', $this->params->get('host_id'));
|
if ($id = $this->params->get("${parameter}_id")) {
|
||||||
if ($host === null && $this->object) {
|
$key = (int) $id;
|
||||||
if (null === $host = $this->object->getUnresolvedRelated('host')) {
|
|
||||||
if ($host = $this->object->get('host_id')) {
|
|
||||||
$host = (int) $host;
|
|
||||||
} else {
|
} else {
|
||||||
$host = $this->object->get('host');
|
$key = $this->params->get($parameter);
|
||||||
|
}
|
||||||
|
if ($key !== null) {
|
||||||
|
$table = DbObjectTypeRegistry::tableNameByType($type);
|
||||||
|
$key = UuidLookup::findUuidForKey($key, $table, $this->db(), $this->getBranch());
|
||||||
|
return $this->loadSpecificObject($table, $key);
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function loadOptionalRelatedObject(IcingaObject $object, $relation)
|
||||||
|
{
|
||||||
|
$key = $object->getUnresolvedRelated($relation);
|
||||||
|
if ($key === null) {
|
||||||
|
if ($key = $object->get("${relation}_id")) {
|
||||||
|
$key = (int) $key;
|
||||||
|
} else {
|
||||||
|
$key = $object->get($relation);
|
||||||
// We reach this when accessing Service Template Fields
|
// We reach this when accessing Service Template Fields
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($key === null) {
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($host !== null) {
|
$table = "icinga_$relation"; // TODO: ask object?
|
||||||
$key = UuidLookup::findUuidForKey($host, 'icinga_host', $this->db(), $this->getBranch());
|
$uuid = UuidLookup::findUuidForKey($key, $table, $this->db(), $this->getBranch());
|
||||||
$this->host = $this->loadSpecificObject('icinga_host', $key);
|
return $this->loadSpecificObject($table, $uuid);
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function loadOptionalSet()
|
|
||||||
{
|
|
||||||
$key = $this->params->get('set', $this->params->get('service_set_id'));
|
|
||||||
if ($key === null && $this->object && $key = $this->object->get('service_set_id')) {
|
|
||||||
$key = (int) $key;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($key !== null) {
|
|
||||||
$uuid = UuidLookup::findUuidForKey($key, 'icinga_service_set', $this->db(), $this->getBranch());
|
|
||||||
$this->set = $this->loadSpecificObject('icinga_service_set', $uuid);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
x
Reference in New Issue
Block a user