diff --git a/library/Director/DataType/DataTypeSqlQuery.php b/library/Director/DataType/DataTypeSqlQuery.php new file mode 100644 index 00000000..d4026dea --- /dev/null +++ b/library/Director/DataType/DataTypeSqlQuery.php @@ -0,0 +1,63 @@ +createElement('select', $name, array( + 'multiOptions' => array(null => '- please choose -') + + $this->fetchData(), + )); + + return $element; + } + + protected function fetchData() + { + if (self::$cachedResult === null || (time() - self::$cacheTime > 3)) { + self::$cachedResult = $this->db()->fetchPairs($this->settings['query']); + self::$cacheTime = time(); + } + + return self::$cachedResult; + } + + public static function addSettingsFormFields(QuickForm $form) + { + $db = $form->getDb(); + + $form->addElement('text', 'resource', array( + 'label' => 'Resource name', + 'required' => true, + )); + + $form->addElement('textarea', 'query', array( + 'label' => 'DB Query', + 'description' => 'This query should return exactly two columns, value and label', + 'required' => true, + )); + + return $form; + } + + protected function db() + { + if ($this->db === null) { + $this->db = DbConnection::fromResourceName($this->settings['resource'])->getDbAdapter(); + } + + return $this->db; + } +} diff --git a/run.php b/run.php index ac8dc84a..2c172218 100644 --- a/run.php +++ b/run.php @@ -7,3 +7,4 @@ $this->registerHook('Director\\DataType', '\\Icinga\\Module\\Director\\DataType\ $this->registerHook('Director\\DataType', '\\Icinga\\Module\\Director\\DataType\\DataTypeNumber', 'number'); $this->registerHook('Director\\DataType', '\\Icinga\\Module\\Director\\DataType\\DataTypeTime', 'time'); $this->registerHook('Director\\DataType', '\\Icinga\\Module\\Director\\DataType\\DataTypeDatalist', 'datalist'); +$this->registerHook('Director\\DataType', '\\Icinga\\Module\\Director\\DataType\\DataTypeSqlQuery', 'sqlquery');