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;
}