/** !Route POST, app/$app/model/gen */
public function generateModel($app)
{
$values = $this->request->post;
$modelName = $values['modelName'];
$tableExists = $values['tableExists'] == 'yes' ? true : false;
if ($tableExists) {
$dataSource = $values['existingDataSource'];
$createTable = false;
$tableName = $values['existingTableName'];
} else {
$dataSource = $values['dataSource'];
$createTable = $values['createTable'] == 'Yes' ? true : false;
$tableName = $values['tableName'];
}
$propertyNames = $values['fields'];
$primaryKey = $values['primaryKey'];
$types = $values['types'];
Library::import('recess.database.orm.Model', true);
// Forcing b/c ModelDescriptor is in Model
$modelDescriptor = new ModelDescriptor($modelName, false);
$modelDescriptor->setSource($dataSource);
$modelDescriptor->setTable($tableName, false);
$pkFound = false;
foreach ($propertyNames as $i => $name) {
if ($name == "") {
continue;
}
$property = new ModelProperty();
$property->name = trim($name);
if ($name == $primaryKey) {
$property->isPrimaryKey = true;
}
if ($types[$i] == 'Integer Autoincrement') {
if ($property->isPrimaryKey) {
$property->type = RecessType::INTEGER;
$property->isAutoIncrement = true;
} else {
$property->type = RecessType::INTEGER;
}
} else {
$property->type = $types[$i];
}
$modelDescriptor->properties[] = $property;
}
Library::import('recess.database.orm.ModelGen');
$this->modelCode = ModelGen::toCode($modelDescriptor, $_ENV['dir.temp'] . 'Model.class.php');
$app = new $app();
if (strpos($app->modelsPrefix, 'recess.apps.') !== false) {
$base = $_ENV['dir.recess'];
} else {
$base = $_ENV['dir.apps'];
}
$path = $base . str_replace(Library::dotSeparator, Library::pathSeparator, $app->modelsPrefix);
$path .= $modelName . '.class.php';
$this->path = $path;
$this->modelWasSaved = false;
$this->codeGenMessage = '';
try {
if (file_exists($this->path)) {
if (file_get_contents($this->path) == $this->modelCode) {
$this->modelWasSaved = true;
} else {
$this->codeGenMessage = 'File already exists!';
}
} else {
file_put_contents($this->path, $this->modelCode);
$this->modelWasSaved = true;
}
} catch (Exception $e) {
$this->codeGenMessage = 'File could not be saved. Is models directory writeable?';
$this->modelWasSaved = false;
}
$this->modelName = $modelName;
$this->appName = get_class($app);
$this->tableGenAttempted = $createTable;
$this->tableWasCreated = false;
$this->tableSql = '';
if ($createTable) {
$modelSource = Databases::getSource($dataSource);
$this->tableSql = $modelSource->createTableSql($modelDescriptor);
try {
$modelSource->exec($this->tableSql);
$this->tableWasCreated = true;
} catch (Exception $e) {
$this->tableWasCreated = false;
}
}
return $this->ok('createModelComplete');
}