summaryrefslogtreecommitdiffstats
path: root/library/Director/CustomVariable/CustomVariableArray.php
diff options
context:
space:
mode:
Diffstat (limited to 'library/Director/CustomVariable/CustomVariableArray.php')
-rw-r--r--library/Director/CustomVariable/CustomVariableArray.php100
1 files changed, 100 insertions, 0 deletions
diff --git a/library/Director/CustomVariable/CustomVariableArray.php b/library/Director/CustomVariable/CustomVariableArray.php
new file mode 100644
index 0000000..7e430a4
--- /dev/null
+++ b/library/Director/CustomVariable/CustomVariableArray.php
@@ -0,0 +1,100 @@
+<?php
+
+namespace Icinga\Module\Director\CustomVariable;
+
+use Icinga\Module\Director\IcingaConfig\IcingaConfigHelper as c;
+use Icinga\Module\Director\IcingaConfig\IcingaLegacyConfigHelper as c1;
+
+class CustomVariableArray extends CustomVariable
+{
+ /** @var CustomVariable[] */
+ protected $value;
+
+ public function equals(CustomVariable $var)
+ {
+ if (! $var instanceof CustomVariableArray) {
+ return false;
+ }
+
+ return $var->getDbValue() === $this->getDbValue();
+ }
+
+ public function getValue()
+ {
+ $ret = array();
+ foreach ($this->value as $var) {
+ $ret[] = $var->getValue();
+ }
+
+ return $ret;
+ }
+
+ public function getDbValue()
+ {
+ return json_encode($this->getValue());
+ }
+
+ public function getDbFormat()
+ {
+ return 'json';
+ }
+
+ public function setValue($value)
+ {
+ $new = array();
+
+ foreach ($value as $k => $v) {
+ $new[] = self::wantCustomVariable($k, $v);
+ }
+
+ $equals = true;
+ if (is_array($this->value) && count($new) === count($this->value)) {
+ foreach ($this->value as $k => $v) {
+ if (! $new[$k]->equals($v)) {
+ $equals = false;
+ break;
+ }
+ }
+ } else {
+ $equals = false;
+ }
+
+ if (! $equals) {
+ $this->value = $new;
+ $this->setModified();
+ }
+
+ $this->deleted = false;
+
+ return $this;
+ }
+
+ public function flatten(array &$flat, $prefix)
+ {
+ foreach ($this->value as $k => $v) {
+ $v->flatten($flat, sprintf('%s[%d]', $prefix, $k));
+ }
+ }
+
+ public function toConfigString($renderExpressions = false)
+ {
+ $parts = array();
+ foreach ($this->value as $k => $v) {
+ $parts[] = $v->toConfigString($renderExpressions);
+ }
+
+ return c::renderEscapedArray($parts);
+ }
+
+ public function __clone()
+ {
+ foreach ($this->value as $key => $value) {
+ $this->value[$key] = clone($value);
+ }
+ }
+
+ public function toLegacyConfigString()
+ {
+ return c1::renderArray($this->value);
+ }
+}