/** * Constructor * * @access public */ public function __construct($path, $entitiesToGen = array()) { $xmlfile = Frontend::cleanPath($path) . '/config/xml/project.xml'; $this->_projectPath = Frontend::cleanPath($path); $this->xml = simplexml_load_file($xmlfile); $this->entitiesToGen = $entitiesToGen; $this->smarty = new Smarty(); $this->smarty->compile_dir = SMARTY_COMPILE_DIR; $this->smarty->template_dir = dirname(__FILE__) . '/templates'; $this->smarty->force_compile = true; $this->smarty->left_delimiter = '[['; $this->smarty->right_delimiter = ']]'; $this->smarty->caching = false; $file = self::$fileData; $entities = $links = array(); foreach ($this->xml->entity as $entity) { $e = $this->handleEntity($entity); $entities[strval($e['name'])] = $e; foreach ($e['links'] as $link) { if (!isset($links[strval($link['linktable'])])) { $links[strval($link['linktable'])] = array('tablename' => $link['linktable'], 'field' => $link['field'], 'linkfield' => $link['linkfield']); } } } // Add links to navigable foreign keys foreach ($entities as $entity) { foreach ($entity['fkeys'] as $p) { if (isset($entities[strval($p['class'])]) && $p['navigable'] == 1) { $linkType = 'onetomany'; // XXX $link = array(); $link['name'] = !empty($p['navigablename']) ? $p['navigablename'] : $entity['name']; $link['class'] = $entity['name']; $link['field'] = $p['name']; $link['ondelete'] = !empty($p['ondelete']) ? $p['ondelete'] : 'nullify'; $link['multiplicity'] = $linkType; $link['type'] = self::$propertyTypeMap[$linkType]; $link['type']['name'] = $linkType; $entities[strval($p['class'])]['links'][] = $link; } } } $this->_entities = $entities; // manage mapping $this->fullMapping = array(); foreach ($entities as $entity) { $this->fullMapping[strval($entity['name'])] = $this->buildMapping($entity); } $this->smarty->assign('file', $file); $this->smarty->assign('entities', $entities); $this->smarty->assign('links', $links); // to generate links tables in sql }