LazyRecord\Exporter\XMLExporter::appendRecordInplace PHP Method

appendRecordInplace() protected method

protected appendRecordInplace ( DOMDocument $dom, DOMElement $root, BaseModel $record, LazyRecord\Schema\SchemaInterface $schema = null, $recursive = true )
$dom DOMDocument
$root DOMElement
$record LazyRecord\BaseModel
$schema LazyRecord\Schema\SchemaInterface
    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);
                }
            }
        }
    }