Esempio n. 1
0
 /**
  * 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
 }