Jarves\Configuration\Model::appendXmlValue PHP Method

appendXmlValue() public method

Appends the xm structure with the given values.
public appendXmlValue ( string $key, mixed $value, DOMNode $node, boolean $arrayType = false, boolean $printDefaults = false, boolean $printComments = false ) : DOMNode
$key string
$value mixed
$node DOMNode
$arrayType boolean
$printDefaults boolean
$printComments boolean
return DOMNode
    public function appendXmlValue($key, $value, \DOMNode $node, $arrayType = false, $printDefaults = false, $printComments = false)
    {
        $doc = $node instanceof \DOMDocument ? $node : $node->ownerDocument;
        $append = function ($el) use($node) {
            return $node->appendChild($el);
        };
        if ($printComments && property_exists(get_called_class(), $key) && ($comment = $this->getPropertyDescription($key))) {
            if (in_array($key, $this->attributes)) {
                $comment = Tools::indentString($comment, 4);
                $comment = sprintf("\n\n  Attribute %s:\n\n%s", $key, $comment);
                $this->lastRootElementComment->appendData($comment);
            } else {
                $comment = "\n" . Tools::indentString($comment, 2);
                $comment = $doc->createComment($comment);
                $append($comment);
            }
        }
        if (null !== $this->nodeValueVar && $key == $this->nodeValueVar) {
            $textNode = $doc->createTextNode($value);
            $result = $append($textNode);
        } else {
            if (is_scalar($value) || null === $value) {
                $value = is_bool($value) ? $value ? 'true' : 'false' : (string) $value;
                if ($arrayType) {
                    $element = $doc->createElement(@$this->arrayIndexNames[$arrayType] ?: 'item');
                    if (!is_integer($key)) {
                        $element->setAttribute('key', (string) $key);
                    }
                    $element->nodeValue = $value;
                    $result = $append($element);
                } else {
                    if (in_array($key, $this->attributes)) {
                        //                    $key = Tools::camelcase2Char($key, '-');
                        $result = $node->setAttribute($key, $value);
                    } else {
                        $elementName = is_integer($key) ? $this->arrayIndexNames[$arrayType] ?: 'item' : $key;
                        //                    $elementName = Tools::camelcase2Char($elementName, '-');
                        $element = $doc->createElement($elementName);
                        $element->nodeValue = $value;
                        $result = $append($element);
                    }
                }
            } else {
                if (is_array($value)) {
                    if ($arrayName = $this->getElementArrayName($key)) {
                        $element = $node;
                    } else {
                        $elementName = is_integer($key) ? $this->arrayIndexNames[$arrayType] ?: 'item' : $key;
                        //                $elementName = Tools::camelcase2Char($elementName, '-');
                        $element = $doc->createElement($elementName);
                    }
                    foreach ($value as $k => $v) {
                        $this->appendXmlValue($k, $v, $element, $key, $printDefaults, $printComments);
                    }
                    if (!$arrayName) {
                        $result = $append($element);
                    } else {
                        $result = $element;
                    }
                } else {
                    if ($value instanceof Model) {
                        $result = $value->appendXml($node, $printDefaults, $printComments);
                    }
                }
            }
        }
        return $result;
    }