Jarves\ORM\Builder\Propel::getXmlTable PHP Method

getXmlTable() protected method

protected getXmlTable ( Object $object, SimpleXMLElement $objectTable = null ) : SimpleXMLElement
$object Jarves\Configuration\Object
$objectTable SimpleXMLElement
return SimpleXMLElement
    protected function getXmlTable(Object $object, \SimpleXMLElement $objectTable = null)
    {
        if (!$objectTable) {
            $objectTable = new \SimpleXMLElement('<table />');
            //simplexml_load_string('<database></database>');
        }
        if (!$object->getTable()) {
            throw new ModelBuildException(sprintf('The object `%s` has no table defined', $object->getId()));
        }
        $objectTable['name'] = $object->getTable();
        $objectTable['phpName'] = ucfirst($object->getId());
        if ($object->isCrossRef()) {
            $objectTable['isCrossRef'] = 'true';
        }
        $columnsDefined = array();
        if (!$object->getFields()) {
            throw new ModelBuildException(sprintf('The object `%s` has no fields defined', $object->getId()));
        }
        foreach ($object->getFields() as $field) {
            if ($columns = $field->getFieldType()->getColumns()) {
                foreach ($columns as $column) {
                    $name = Tools::camelcase2Underscore($column->getName());
                    //column exist?
                    $eColumns = $objectTable->xpath('column[@name =\'' . $name . '\']');
                    if ($eColumns) {
                        $newCol = current($eColumns);
                        if ($newCol['custom'] == true) {
                            continue;
                        }
                    } else {
                        $newCol = $objectTable->addChild('column');
                    }
                    $columnsDefined[] = $name;
                    $this->setupColumnAttributes($column, $newCol);
                    if ($field->isRequired()) {
                        $newCol['required'] = 'true';
                    }
                    if ($field->isPrimaryKey()) {
                        $newCol['primaryKey'] = 'true';
                    }
                    if ($field->isAutoIncrement()) {
                        $newCol['autoIncrement'] = 'true';
                    }
                }
            }
        }
        if ($relations = $object->getRelations()) {
            foreach ($relations as $relation) {
                $this->addRelation($object, $relation, $objectTable);
            }
        }
        if ($object->isNested()) {
            $behaviors = $objectTable->xpath('behavior[@name=\'nested_set\']');
            if ($behaviors) {
                $behavior = current($behaviors);
            } else {
                $behavior = $objectTable->addChild('behavior');
            }
            if (!$behavior['custom']) {
                $behavior['name'] = 'nested_set';
                $parameters = ['left_column' => 'lft', 'right_column' => 'rgt', 'level_column' => 'lvl'];
                if ($object->getNestedRootAsObject()) {
                    $parameters['use_scope'] = 'true';
                    $parameters['scope_column'] = Tools::camelcase2Underscore($object->getNestedRootObjectField());
                }
                foreach ($parameters as $k => $v) {
                    $parameter = $behavior->addChild('parameter');
                    $parameter['name'] = $k;
                    $parameter['value'] = $v;
                }
            }
        }
        if ($object['workspace']) {
            $behaviors = $objectTable->xpath('behavior[@name=\'Jarves\\Propel\\Behavior\\WorkspaceBehavior\']');
            if ($behaviors) {
                $behavior = current($behaviors);
            } else {
                $behavior = $objectTable->addChild('behavior');
            }
            $behavior['name'] = 'Jarves\\Propel\\Behavior\\WorkspaceBehavior';
        }
        $vendors = $objectTable->xpath('vendor[@type=\'mysql\']');
        if ($vendors) {
            foreach ($vendors as $k => $v) {
                unset($vendors[$k][0]);
            }
        }
        $vendor = $objectTable->addChild('vendor');
        $vendor['type'] = 'mysql';
        $params = $vendor->xpath('parameter[@name=\'Charset\']');
        if ($params) {
            $param = current($params);
        } else {
            $param = $vendor->addChild('parameter');
        }
        $param['name'] = 'Charset';
        $param['value'] = 'utf8';
        return $objectTable;
        //        $dom = new \DOMDocument;
        //        $dom->preserveWhiteSpace = false;
        //        $dom->loadXML($xml->asXML());
        //        $dom->formatOutput = true;
        //
        //        $xml = $dom->saveXML();
        //        $prefix = '<?xml version="1.0"? >';
        //        if (0 === strpos($xml, $prefix)) {
        //            $xml = substr($xml, strlen($prefix));
        //        }
        //
        //        return trim($xml);
    }