summaryrefslogtreecommitdiffstats
path: root/library/Director/Objects/ImportExportHelper.php
diff options
context:
space:
mode:
Diffstat (limited to 'library/Director/Objects/ImportExportHelper.php')
-rw-r--r--library/Director/Objects/ImportExportHelper.php68
1 files changed, 68 insertions, 0 deletions
diff --git a/library/Director/Objects/ImportExportHelper.php b/library/Director/Objects/ImportExportHelper.php
new file mode 100644
index 0000000..98d34c6
--- /dev/null
+++ b/library/Director/Objects/ImportExportHelper.php
@@ -0,0 +1,68 @@
+<?php
+
+namespace Icinga\Module\Director\Objects;
+
+use Icinga\Module\Director\Db;
+
+/**
+ * Helper class, allows to reduce duplicate code. Might be moved elsewhere
+ * afterwards
+ */
+class ImportExportHelper
+{
+ /**
+ * Does not support every type out of the box
+ *
+ * @param IcingaObject $object
+ * @return object
+ * @throws \Icinga\Exception\NotFoundError
+ */
+ public static function simpleExport(IcingaObject $object)
+ {
+ $props = (array) $object->toPlainObject();
+ $props['fields'] = static::fetchFields($object);
+ ksort($props); // TODO: ksort in toPlainObject?
+
+ return (object) $props;
+ }
+
+ public static function fetchFields(IcingaObject $object)
+ {
+ return static::loadFieldReferences(
+ $object->getConnection(),
+ $object->getShortTableName(),
+ $object->get('id')
+ );
+ }
+
+ /**
+ * @param Db $connection
+ * @param string $type Warning: this will not be validated.
+ * @param int $id
+ * @return array
+ */
+ public static function loadFieldReferences(Db $connection, $type, $id)
+ {
+ $db = $connection->getDbAdapter();
+ $res = $db->fetchAll(
+ $db->select()->from([
+ 'f' => "icinga_${type}_field"
+ ], [
+ 'f.datafield_id',
+ 'f.is_required',
+ 'f.var_filter',
+ ])->join(['df' => 'director_datafield'], 'df.id = f.datafield_id', [])
+ ->where("${type}_id = ?", $id)
+ ->order('varname ASC')
+ );
+
+ if (empty($res)) {
+ return [];
+ }
+
+ foreach ($res as $field) {
+ $field->datafield_id = (int) $field->datafield_id;
+ }
+ return $res;
+ }
+}