Exemple #1
0
 public static function importSchema($directory, array $connections = array(), array $options = array())
 {
     $classes = array();
     $builder = new Soup_Import_Builder();
     $builder->setTargetPath($directory);
     $builder->setOptions($options);
     $definitions = array();
     foreach (self::listTables() as $table) {
         $definition = array();
         $definition['tableName'] = $table;
         $definition['className'] = Soup_Inflector::classify(Soup_Inflector::tableize($table));
         $definition['columns'] = self::listTableColumns($table);
         $definition['connection'] = null;
         $definition['connectionClassName'] = $definition['className'];
         try {
             $definition['relations'] = array();
             $relations = self::listTableRelations($table);
             $relClasses = array();
             $counter = array();
             foreach ($relations as $relation) {
                 $table = $relation['table'];
                 $class = Soup_Inflector::classify(Soup_Inflector::tableize($table));
                 $counter[$table] = isset($counter[$table]) ? $counter[$table] + 1 : 1;
                 if (in_array($class, $relClasses)) {
                     $alias = $class . '_' . $counter[$table];
                 } else {
                     $alias = $class;
                 }
                 $relClasses[] = $class;
                 $definition['relations'][$alias] = array('alias' => $alias, 'class' => $class, 'local' => $relation['local'], 'foreign' => $relation['foreign']);
             }
         } catch (Exception $e) {
         }
         $definitions[strtolower($definition['className'])] = $definition;
         $classes[] = $definition['className'];
     }
     // Build opposite end of relationships
     foreach ($definitions as $definition) {
         $className = $definition['className'];
         $relClasses = array();
         $counter = array();
         foreach ($definition['relations'] as $alias => $relation) {
             $counter[$relation['class']] = isset($counter[$relation['class']]) ? $counter[$relation['class']] + 1 : 1;
             if (in_array($relation['class'], $relClasses) || isset($definitions[$relation['class']]['relations'][$className])) {
                 $alias = $className . '_' . (count($relClasses) + 1);
                 // 					$alias = $className . '_' . $counter[$className];
             } else {
                 $alias = $className;
             }
             $relClasses[] = $relation['class'];
             $definitions[strtolower($relation['class'])]['relations'][$alias] = array('type' => Soup_Table::RELATION_MANY, 'alias' => $alias, 'class' => $className, 'local' => $relation['foreign'], 'foreign' => $relation['local']);
         }
     }
     // Build records
     foreach ($definitions as $definition) {
         $builder->buildRecord($definition);
     }
     return $classes;
 }
Exemple #2
0
 /**
  * loadTemplate
  *
  * Loads the class template used for generating classes
  *
  * @return void
  */
 public function loadTemplate()
 {
     if (isset(self::$_tpl)) {
         return;
     }
     self::$_tpl = '/**' . '%s' . PHP_EOL . ' */' . PHP_EOL . '%sclass %s extends %s' . PHP_EOL . '{' . '%s' . PHP_EOL . '%s' . PHP_EOL . '}';
 }
Exemple #3
0
 /**
  * importSchema
  *
  * A method to import a Schema and translate it into a Soup_Record object
  *
  * @param  string $schema       The file containing the XML schema
  * @param  string $format       Format of the schema file
  * @param  string $directory    The directory where the Soup_Record class will be written
  * @param  array  $models       Optional array of models to import
  *
  * @return void
  */
 public function importSchema($schema, $format = 'yml', $directory = null, $models = array())
 {
     $schema = (array) $schema;
     $builder = new Soup_Import_Builder();
     $builder->setTargetPath($directory);
     $builder->setOptions($this->getOptions());
     $array = $this->buildSchema($schema, $format);
     if (count($array) == 0) {
         throw new Soup_Import_Exception(sprintf('No ' . $format . ' schema found in ' . implode(", ", $schema)));
     }
     foreach ($array as $name => $definition) {
         if (!empty($models) && !in_array($definition['className'], $models)) {
             continue;
         }
         $builder->buildRecord($definition);
     }
 }
Exemple #4
0
 /**
  * importSchema
  *
  * method for importing existing schema to Soup_Record classes
  *
  * @param string $directory
  * @param array $connections Array of connection names to generate models for
  * @return array                the names of the imported classes
  */
 public function importSchema($directory, array $connections = array(), array $options = array())
 {
     try {
         $classes = array();
         print 'start';
         $connection = Soup_Manager::getDefaultConnection();
         $builder = new Soup_Import_Builder();
         $builder->setTargetPath($directory);
         $builder->setOptions($options);
         $definitions = array();
         print_r($connection->getImport());
         foreach ($connection->getImport()->listTables() as $table) {
             $definition = array();
             $definition['tableName'] = $table;
             $definition['className'] = Soup_Inflector::classify(Soup_Inflector::tableize($table));
             $definition['columns'] = $connection->getImport()->listTableColumns($table);
             $definition['connection'] = $connection->getName();
             $definition['connectionClassName'] = $definition['className'];
             try {
                 $definition['relations'] = array();
                 $relations = $connection->getImport()->listTableRelations($table);
                 $relClasses = array();
                 foreach ($relations as $relation) {
                     $table = $relation['table'];
                     $class = Soup_Inflector::classify(Soup_Inflector::tableize($table));
                     if (in_array($class, $relClasses)) {
                         $alias = $class . '_' . (count($relClasses) + 1);
                     } else {
                         $alias = $class;
                     }
                     $relClasses[] = $class;
                     $definition['relations'][$alias] = array('alias' => $alias, 'class' => $class, 'local' => $relation['local'], 'foreign' => $relation['foreign']);
                 }
             } catch (Exception $e) {
             }
             $definitions[strtolower($definition['className'])] = $definition;
             $classes[] = $definition['className'];
         }
         // Build opposite end of relationships
         foreach ($definitions as $definition) {
             $className = $definition['className'];
             $relClasses = array();
             foreach ($definition['relations'] as $alias => $relation) {
                 if (in_array($relation['class'], $relClasses) || isset($definitions[$relation['class']]['relations'][$className])) {
                     $alias = $className . '_' . (count($relClasses) + 1);
                 } else {
                     $alias = $className;
                 }
                 $relClasses[] = $relation['class'];
                 $definitions[strtolower($relation['class'])]['relations'][$alias] = array('type' => Soup_Table::RELATION_MANY, 'alias' => $alias, 'class' => $className, 'local' => $relation['foreign'], 'foreign' => $relation['local']);
             }
         }
         // Build records
         foreach ($definitions as $definition) {
             $builder->buildRecord($definition);
         }
         return $classes;
     } catch (Exception $e) {
         throw new Soup_Import_Exception($e->getMessage());
     }
 }