diff options
Diffstat (limited to 'library/Director/Objects/ImportRowModifier.php')
-rw-r--r-- | library/Director/Objects/ImportRowModifier.php | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/library/Director/Objects/ImportRowModifier.php b/library/Director/Objects/ImportRowModifier.php new file mode 100644 index 0000000..76982c2 --- /dev/null +++ b/library/Director/Objects/ImportRowModifier.php @@ -0,0 +1,91 @@ +<?php + +namespace Icinga\Module\Director\Objects; + +use Icinga\Module\Director\Data\Db\DbObjectWithSettings; +use Icinga\Module\Director\Hook\PropertyModifierHook; +use Icinga\Module\Director\Objects\Extension\PriorityColumn; +use RuntimeException; + +class ImportRowModifier extends DbObjectWithSettings implements InstantiatedViaHook +{ + use PriorityColumn; + + protected $table = 'import_row_modifier'; + + protected $keyName = 'id'; + + protected $autoincKeyName = 'id'; + + protected $defaultProperties = [ + 'id' => null, + 'source_id' => null, + 'property_name' => null, + 'provider_class' => null, + 'target_property' => null, + 'priority' => null, + 'description' => null, + ]; + + protected $settingsTable = 'import_row_modifier_setting'; + + protected $settingsRemoteId = 'row_modifier_id'; + + private $hookInstance; + + public function getInstance() + { + if ($this->hookInstance === null) { + $class = $this->get('provider_class'); + /** @var PropertyModifierHook $obj */ + if (! class_exists($class)) { + throw new RuntimeException(sprintf( + 'Cannot instantiate Property modifier %s', + $class + )); + } + $obj = new $class; + $obj->setSettings($this->getSettings()); + $obj->setPropertyName($this->get('property_name')); + $obj->setTargetProperty($this->get('target_property')); + $obj->setDb($this->connection); + $this->hookInstance = $obj; + } + + return $this->hookInstance; + } + + /** + * @deprecated please use \Icinga\Module\Director\Data\Exporter + * @return \stdClass + */ + public function export() + { + $properties = $this->getProperties(); + unset($properties['id']); + unset($properties['source_id']); + $properties['settings'] = $this->getInstance()->exportSettings(); + ksort($properties); + + return (object) $properties; + } + + public function setSettings($settings) + { + $settings = $this->getInstance()->setSettings((array) $settings)->getSettings(); + + return parent::setSettings($settings); // TODO: Change the autogenerated stub + } + + protected function beforeStore() + { + if (! $this->hasBeenLoadedFromDb() && $this->get('priority') === null) { + $this->setNextPriority('source_id'); + } + } + + protected function onInsert() + { + $this->refreshPriortyProperty(); + } +} |