protected function appendRecordInplace(DOMDocument $dom, DOMElement $root, BaseModel $record, SchemaInterface $schema = null, $recursive = true)
{
if (!$schema) {
$schema = $record->getSchema();
}
$columns = $schema->getColumns();
foreach ($columns as $column) {
$columnElement = $dom->createElement($column->name);
$columnElement->setAttribute('isa', $column->isa);
if ($column->type) {
$columnElement->setAttribute('type', $column->type);
}
if ($column->contentType) {
$columnElement->setAttribute('content-type', $column->contentType);
}
$value = $record->getValue($column->name);
if ($column->isa == 'bool') {
if ($value === null) {
$text = '';
} else {
$text = $value ? '1' : '0';
}
} else {
$text = $value;
}
$columnElement->appendChild(new DOMText($text));
$root->appendChild($columnElement);
}
if (!$recursive) {
return;
}
foreach ($schema->getRelations() as $rId => $r) {
if ($r['type'] === Relationship::HAS_MANY) {
$foreignRecords = $record->get($rId);
if (!$foreignRecords || $foreignRecords->size() === 0) {
continue;
}
$relationElement = $dom->createElement($rId);
$root->appendChild($relationElement);
$relationElement->setAttribute('type', 'has-many');
$collectionElement = $dom->createElement('collection');
$relationElement->appendChild($collectionElement);
foreach ($foreignRecords as $foreignRecord) {
$this->appendRecord($dom, $collectionElement, $foreignRecord, null, false);
}
} elseif ($r['type'] === Relationship::HAS_ONE) {
$foreignRecord = $record->get($rId);
if (!$foreignRecord) {
continue;
}
$relationElement = $dom->createElement($rId);
$root->appendChild($relationElement);
$relationElement->setAttribute('type', 'has-one');
$this->appendRecord($dom, $relationElement, $foreignRecord, null, false);
} elseif ($r['type'] === Relationship::MANY_TO_MANY) {
$foreignRecords = $record->get($rId);
if (!$foreignRecords || $foreignRecords->size() === 0) {
continue;
}
// $relationElement = $dom->createElement($rId);
// $relationElement->setAttribute('type', 'many-to-many');
// $root->ownerDocument->firstChild->appendChild($relationElement);
// $relationElement->appendChild($collectionElement);
$collectionElement = $dom->createElement('collection');
$refNode = $root->ownerDocument->firstChild->insertBefore($collectionElement, $root->ownerDocument->firstChild->firstChild);
foreach ($foreignRecords as $foreignRecord) {
$this->appendRecord($dom, $collectionElement, $foreignRecord, null, false);
}
}
}
}