IcingaObject: load and store related sets

This commit is contained in:
Thomas Gelf 2016-02-29 18:57:19 +01:00
parent 4b46330855
commit f97e117994
1 changed files with 32 additions and 2 deletions

View File

@ -47,6 +47,8 @@ abstract class IcingaObject extends DbObject implements IcingaConfigRenderer
// property => ExtensibleSetClass // property => ExtensibleSetClass
); );
protected $loadedRelatedSets = array();
/** /**
* Array of interval property names * Array of interval property names
* *
@ -96,8 +98,13 @@ abstract class IcingaObject extends DbObject implements IcingaConfigRenderer
protected function getRelatedSet($property) protected function getRelatedSet($property)
{ {
$class = $this->getRelatedSetClass($property); if (! array_key_exists($property, $this->loadedRelatedSets)) {
return $class::forIcingaObject($this, $property); $class = $this->getRelatedSetClass($property);
$this->loadedRelatedSets[$property]
= $class::forIcingaObject($this, $property);
}
return $this->loadedRelatedSets[$property];
} }
public function hasRelation($property) public function hasRelation($property)
@ -179,6 +186,12 @@ abstract class IcingaObject extends DbObject implements IcingaConfigRenderer
return true; return true;
} }
foreach ($this->loadedRelatedSets as $set) {
if ($set->hasBeenModified()) {
return true;
}
}
return parent::hasBeenModified(); return parent::hasBeenModified();
} }
@ -253,6 +266,11 @@ abstract class IcingaObject extends DbObject implements IcingaConfigRenderer
// TODO: what shall we do if it is a template? Fail? // TODO: what shall we do if it is a template? Fail?
} }
if ($this->propertyIsRelatedSet($key)) {
$this->getRelatedSet($key)->set($value);
return $this;
}
if ($this->propertyIsInterval($key)) { if ($this->propertyIsInterval($key)) {
return parent::set($key, c::parseInterval($value)); return parent::set($key, c::parseInterval($value));
} }
@ -764,6 +782,7 @@ abstract class IcingaObject extends DbObject implements IcingaConfigRenderer
->storeGroups() ->storeGroups()
->storeImports() ->storeImports()
->storeRanges() ->storeRanges()
->storeRelatedSets()
->storeArguments(); ->storeArguments();
} }
@ -815,6 +834,17 @@ abstract class IcingaObject extends DbObject implements IcingaConfigRenderer
return $this; return $this;
} }
protected function storeRelatedSets()
{
foreach ($this->loadedRelatedSets as $set) {
if ($set->hasBeenModified()) {
$set->store();
}
}
return $this;
}
protected function storeImports() protected function storeImports()
{ {
if ($this->supportsImports()) { if ($this->supportsImports()) {