}
}
- public function generateSql()
- {
- return IPF_ORM::generateSqlFromModels($this->path.'models');
- }
-
public function modelList()
{
return $this->models;
return strtolower($e[count($e)-1]);
}
- public function createTablesFromModels()
- {
- return IPF_ORM::createTablesFromModels($this->path.'models');
- }
-
- public function loadModels()
- {
- IPF_ORM::loadModels($this->path.'models');
- }
-
/**
* Returns additional context for templates
*
$request->session->setData('logout_time', gmdate('Y-m-d H:i:s'));
}
- static function createPermissionsFromModels(array $pathesToModels)
+ static function createPermissionsFromModels(array $apps)
{
- $baseAdmin = new IPF_Admin_Model();
- $basePerms = $baseAdmin->getPerms();
$permsTable = IPF_ORM::getTable('Permission');
- $appList = IPF_Project::getInstance()->appList();
$permissions = array();
-
- foreach ($pathesToModels as $path)
- {
- foreach (IPF_ORM::filterInvalidModels(IPF_ORM::loadModels($path)) as $modelName)
- {
+ foreach ($apps as $appname => $app) {
+ foreach ($app->modelList() as $modelName) {
$adminModel = IPF_Admin_Model::getModelAdmin($modelName);
-
- if ($adminModel)
- {
- $perms = method_exists($adminModel, 'getPerms') ? $adminModel->getPerms(null) : $basePerms;
-
- foreach ($appList as $app)
- {
- if (in_array($modelName, $app->modelList()) && (!method_exists($app, 'NoPermsFor') || !in_array($modelName, $app->NoPermsFor())))
- {
- foreach ($perms as $permName)
- $permissions[] = get_class($app).'|'.$modelName.'|'.$permName;
- }
+ if ($adminModel) {
+ foreach ($adminModel->getPerms(null) as $permName) {
+ $permissions[] = $appname.'|'.$modelName.'|'.$permName;
}
}
}
print "COLLECTED PERMS:\n----\n".implode("\n", $permissions)."\n----\n";
- if (count($permissions))
- {
+ if (count($permissions)) {
$existingPerms = array();
foreach ($permsTable->findAll() as $model)
print "EXISTING PERMS:\n----\n".implode("\n",$existingPerms)."\n----\n";
- if (count($existingPerms))
- {
+ if (count($existingPerms)) {
$toDel = array_diff($existingPerms, $permissions);
print "2DEL:\n----\n".implode("\n",$toDel)."\n----\n";
- if (count($toDel))
- {
+ if (count($toDel)) {
$permsTable->createQuery()
->delete()
->where("name in ('".implode("','", $toDel)."')")
}
$toAdd = array_diff($permissions, $existingPerms);
- }
- else // first time
- {
+ } else {
+ // first time
// *** FIX: previously, the following models haven't "onDelete: CASCADE" constrain ***
print "DROP RolePermission, UserRole, UserPermission\n";
$export = IPF_ORM_Manager::connection()->export;
$export->dropTable(IPF_ORM::getTable('UserRole')->getTableName());
$export->dropTable(IPF_ORM::getTable('UserPermission')->getTableName());
$auth_app = new IPF_Auth_App();
- $auth_app->createTablesFromModels();
- // *** FIX ***
+ IPF_ORM::createTablesFromModels($auth_app);
$toAdd = $permissions;
}
print "2ADD:\n----\n".implode("\n",$toAdd)."\n----\n";
- foreach ($toAdd as $name)
- {
+ foreach ($toAdd as $name) {
$model = new Permission();
$model->name = $name;
$model->save();
}
- }
- else
- {
+ } else {
print "REMOVE ALL\n";
$permsTable->createQuery()->delete()->execute(); // no women, no cry...
$project = IPF_Project::getInstance();
- $project->loadModels();
-
$su = new User;
$su->username = $username;
$su->email = $email;
return;
}
- $project->loadModels();
-
foreach ($fixtures as $fixture) {
$modelClass = $fixture['model'];
$key = $fixture['key'];
$sql = '';
foreach ($project->frameworkApps() as $app)
- $sql .= $app->generateSql()."\n";
-
- $sql .= IPF_ORM::generateSqlFromModels(IPF::get('project_path').DIRECTORY_SEPARATOR.'models')."\n";
+ $sql .= IPF_ORM::generateSqlFromModels($app)."\n";
foreach ($project->customApps() as $app)
- $sql .= $app->generateSql()."\n";
+ $sql .= IPF_ORM::generateSqlFromModels($app)."\n";
print $sql;
}
$project = IPF_Project::getInstance();
- foreach ($project->frameworkApps() as $app)
- $app->createTablesFromModels();
- IPF_ORM::createTablesFromModels(IPF::get('project_path').DIRECTORY_SEPARATOR.'models');
- foreach ($project->customApps() as $app)
- $app->createTablesFromModels();
+ foreach ($project->appList() as $app)
+ IPF_ORM::createTablesFromModels($app);
}
}
print "Create/Update permissions from model classes\n";
$project = IPF_Project::getInstance();
-
- $pathes = array();
-
- foreach ($project->apps as $appname => &$app) {
- $app = $project->getApp($appName);
- $pathes[] = $app->getPath().'models';
- }
-
- $pathes[] = IPF::get('project_path').DIRECTORY_SEPARATOR.'models';
-
- return IPF_Auth_App::createPermissionsFromModels($pathes);
+ return IPF_Auth_App::createPermissionsFromModels($project->appList());
}
}
const BASE_CLASSES_DIRECTORY = '_generated';
- private static $_loadedModelFiles = array();
-
private function __construct() {}
public static function getTable($componentName)
return $models;
}
- public static function createTablesFromModels($directory)
+ public static function createTablesFromModels($app)
{
- return IPF_ORM_Manager::connection()->export->exportSchema($directory);
+ IPF_ORM_Manager::connection()->export->exportClasses($app->modelList());
}
-
- public static function generateSqlFromModels($directory = null)
+
+ public static function generateSqlFromModels($app)
{
- $sql = IPF_ORM_Manager::connection()->export->exportSql($directory);
+ $sql = IPF_ORM_Manager::connection()->export->exportSortedClassesSql($app->modelList(), false);
+
$build = '';
foreach ($sql as $query) {
$build .= $query.";\n\n";
}
return $build;
- }
-
- public static function loadModel($className, $path = null)
- {
- self::$_loadedModelFiles[$className] = $path;
- }
-
- public static function filterInvalidModels($classes)
- {
- $validModels = array();
- foreach ((array) $classes as $name) {
- if (self::isValidModelClass($name) && ! in_array($name, $validModels)) {
- $validModels[] = $name;
- }
- }
-
- return $validModels;
- }
-
- public static function loadModels($directory, $modelLoading = null)
- {
- $loadedModels = array();
- try{
- $it = new DirectoryIterator($directory.DIRECTORY_SEPARATOR.IPF_ORM::BASE_CLASSES_DIRECTORY);
- }catch(RuntimeException $e){
- return $loadedModels;
- }
- foreach ($it as $file) {
- $e = explode('.', $file->getFileName());
- if (end($e) === 'php') {
- $className = $e[0];
- require_once($file->getPathName());
- }
- }
- $it = new DirectoryIterator($directory);
- foreach ($it as $file) {
- $e = explode('.', $file->getFileName());
- if (end($e) === 'php') {
- $className = $e[0];
- require_once($file->getPathName());
- $loadedModels[$className] = $className;
- }
- }
- return $loadedModels;
- }
-
-
- public static function isValidModelClass($class)
- {
- if ($class instanceof IPF_ORM_Record) {
- $class = get_class($class);
- }
- if (is_string($class) && class_exists($class)) {
- $class = new ReflectionClass($class);
- }
- if ($class instanceof ReflectionClass) {
- if ( ! $class->isAbstract() && $class->isSubClassOf('IPF_ORM_Record')) {
- return true;
- }
- }
- return false;
}
public static function dump($var, $output = true, $indent = "")
return implode("\n", $ret);
}
}
+
return $sql;
}
- public function createTable($name, array $fields, array $options = array())
- {
- $sql = (array) $this->createTableSql($name, $fields, $options);
-
- foreach ($sql as $query) {
- $this->conn->execute($query);
- }
- }
-
public function createSequence($seqName, $start = 1, array $options = array())
{
return $this->conn->execute($this->createSequenceSql($seqName, $start = 1, $options));
return '';
}
- public function exportSchema($directory = null)
- {
- if ($directory !== null) {
- $models = IPF_ORM::filterInvalidModels(IPF_ORM::loadModels($directory));
- } else {
- $models = IPF_ORM::getLoadedModels();
- }
- $this->exportClasses($models);
- }
-
public function exportSortedClassesSql($classes, $groupByConnection = true)
{
$connections = array();
}
}
- public function exportClassesSql(array $classes)
+ public function exportClassesSql(array $models)
{
- $models = IPF_ORM::filterInvalidModels($classes);
-
$sql = array();
foreach ($models as $name) {
return $sql;
}
+}
- public function exportSql($directory = null)
- {
- if ($directory !== null) {
- $models = IPF_ORM::filterInvalidModels(IPF_ORM::loadModels($directory));
- } else {
- $models = IPF_ORM::getLoadedModels();
- }
-
- return $this->exportSortedClassesSql($models, false);
- }
-
- public function exportTable(IPF_ORM_Table $table)
- {
- try {
- $data = $table->getExportableFormat();
-
- $this->conn->export->createTable($data['tableName'], $data['columns'], $data['options']);
- } catch(IPF_ORM_Exception $e) {
- // we only want to silence table already exists errors
- if ($e->getPortableCode() !== IPF_ORM::ERR_ALREADY_EXISTS) {
- throw $e;
- }
- }
- }
-}
\ No newline at end of file
IPF_Utils::makeDirectories($targetPath);
if (file_put_contents($writePath, implode(PHP_EOL, $code)) === false)
throw new IPF_ORM_Exception("Couldn't write file " . $writePath);
-
- IPF_ORM::loadModel($className, $writePath);
}
}
public function getTemplates()
{
return $this->_templates;
- }
- public function export()
- {
- $this->_conn->export->exportTable($this);
}
public function getExportableFormat($parseForeignKeys = true)
return $result;
}
- public function loadModels()
- {
- foreach ($this->frameworkApps() as $app)
- $app->loadModels();
-
- IPF_ORM::loadModels(IPF::get('project_path').DIRECTORY_SEPARATOR.'models');
-
- foreach ($this->customApps() as $app)
- $app->loadModels();
- }
-
public function run()
{
if (IPF::get('debug')) {
$cli = new IPF_Cli;
$cli->run();
} else {
- $this->loadModels();
$this->router = new IPF_Router();
$this->router->dispatch(IPF_HTTP_URL::getAction());
}