From e4bc10111b13b374eb21bd7db0d7d20ca4a005ee Mon Sep 17 00:00:00 2001 From: Andrey Kutejko Date: Wed, 20 Aug 2014 16:51:10 +0300 Subject: [PATCH] extract legacy ORM related code to separated application --- ipf/legacy_orm/app.php | 21 ++ .../commands/buildcontribmodels.php | 21 ++ ipf/legacy_orm/commands/buildmodels.php | 30 +++ ipf/legacy_orm/commands/fixtures.php | 68 ++++++ ipf/legacy_orm/commands/sql.php | 25 ++ ipf/legacy_orm/commands/syncdb.php | 21 ++ ipf/legacy_orm/modelform.php | 219 ++++++++++++++++++ ipf/{ => legacy_orm}/orm.php | 0 ipf/{ => legacy_orm}/orm/access.php | 0 ipf/{ => legacy_orm}/orm/adapter.php | 0 ipf/{ => legacy_orm}/orm/cache/interface.php | 0 ipf/{ => legacy_orm}/orm/collection.php | 0 ipf/{ => legacy_orm}/orm/configurable.php | 0 ipf/{ => legacy_orm}/orm/connection.php | 0 .../orm/connection/module.php | 0 ipf/{ => legacy_orm}/orm/connection/mysql.php | 0 .../orm/connection/statement.php | 0 .../orm/connection/unitofwork.php | 0 ipf/{ => legacy_orm}/orm/event.php | 0 ipf/{ => legacy_orm}/orm/exception.php | 0 .../orm/exception/adapter.php | 0 .../orm/exception/connection.php | 0 .../orm/exception/locator.php | 0 ipf/{ => legacy_orm}/orm/exception/mysql.php | 0 ipf/{ => legacy_orm}/orm/exception/orm.php | 0 .../orm/exception/profiler.php | 0 .../orm/exception/validator.php | 0 ipf/{ => legacy_orm}/orm/export.php | 0 ipf/{ => legacy_orm}/orm/export/mysql.php | 0 ipf/{ => legacy_orm}/orm/expression.php | 0 .../orm/expression/driver.php | 0 ipf/{ => legacy_orm}/orm/expression/mysql.php | 0 ipf/{ => legacy_orm}/orm/hydrator.php | 0 .../orm/hydrator/abstract.php | 0 .../orm/hydrator/arraydriver.php | 0 .../orm/hydrator/recorddriver.php | 0 ipf/{ => legacy_orm}/orm/import/builder.php | 0 ipf/{ => legacy_orm}/orm/import/schema.php | 0 ipf/{ => legacy_orm}/orm/inflector.php | 0 ipf/{ => legacy_orm}/orm/manager.php | 0 ipf/{ => legacy_orm}/orm/null.php | 0 ipf/{ => legacy_orm}/orm/pager.php | 0 ipf/{ => legacy_orm}/orm/pager/layout.php | 0 .../orm/pager/layoutarrows.php | 0 ipf/{ => legacy_orm}/orm/pager/range.php | 0 .../orm/pager/range/jumping.php | 0 .../orm/pager/range/sliding.php | 0 ipf/{ => legacy_orm}/orm/query.php | 0 ipf/{ => legacy_orm}/orm/query/abstract.php | 0 ipf/{ => legacy_orm}/orm/query/check.php | 0 ipf/{ => legacy_orm}/orm/query/condition.php | 0 ipf/{ => legacy_orm}/orm/query/filter.php | 0 .../orm/query/filter/chain.php | 0 .../orm/query/filter/interface.php | 0 ipf/{ => legacy_orm}/orm/query/from.php | 0 ipf/{ => legacy_orm}/orm/query/groupby.php | 0 ipf/{ => legacy_orm}/orm/query/having.php | 0 .../orm/query/joincondition.php | 0 ipf/{ => legacy_orm}/orm/query/limit.php | 0 ipf/{ => legacy_orm}/orm/query/offset.php | 0 ipf/{ => legacy_orm}/orm/query/orderby.php | 0 ipf/{ => legacy_orm}/orm/query/parser.php | 0 ipf/{ => legacy_orm}/orm/query/part.php | 0 ipf/{ => legacy_orm}/orm/query/registry.php | 0 ipf/{ => legacy_orm}/orm/query/select.php | 0 ipf/{ => legacy_orm}/orm/query/set.php | 0 ipf/{ => legacy_orm}/orm/query/tokenizer.php | 0 ipf/{ => legacy_orm}/orm/query/where.php | 0 ipf/{ => legacy_orm}/orm/rawsql.php | 0 ipf/{ => legacy_orm}/orm/record.php | 0 ipf/{ => legacy_orm}/orm/record/abstract.php | 0 ipf/{ => legacy_orm}/orm/record/iterator.php | 0 ipf/{ => legacy_orm}/orm/relation.php | 0 .../orm/relation/association.php | 0 .../orm/relation/foreignkey.php | 0 .../orm/relation/localkey.php | 0 ipf/{ => legacy_orm}/orm/relation/nest.php | 0 ipf/{ => legacy_orm}/orm/relation/parser.php | 0 ipf/{ => legacy_orm}/orm/table.php | 0 ipf/{ => legacy_orm}/orm/table/repository.php | 0 ipf/{ => legacy_orm}/orm/template.php | 0 .../orm/template/listener/orderable.php | 0 .../orm/template/listener/owned.php | 0 .../orm/template/listener/sluggable.php | 0 .../orm/template/listener/timestampable.php | 0 .../orm/template/orderable.php | 0 ipf/{ => legacy_orm}/orm/template/owned.php | 0 .../orm/template/sluggable.php | 0 .../orm/template/timestampable.php | 0 ipf/{ => legacy_orm}/orm/transaction.php | 0 .../orm/transaction/mysql.php | 0 ipf/{ => legacy_orm}/orm/utils.php | 0 ipf/{ => legacy_orm}/orm/validator.php | 0 .../orm/validator/country.php | 0 .../orm/validator/creditcard.php | 0 ipf/{ => legacy_orm}/orm/validator/date.php | 0 ipf/{ => legacy_orm}/orm/validator/driver.php | 0 ipf/{ => legacy_orm}/orm/validator/email.php | 0 .../orm/validator/exclude.php | 0 ipf/{ => legacy_orm}/orm/validator/file.php | 0 ipf/{ => legacy_orm}/orm/validator/future.php | 0 ipf/{ => legacy_orm}/orm/validator/html.php | 0 .../orm/validator/htmlcolor.php | 0 ipf/{ => legacy_orm}/orm/validator/image.php | 0 ipf/{ => legacy_orm}/orm/validator/ip.php | 0 .../orm/validator/minlength.php | 0 .../orm/validator/nospace.php | 0 .../orm/validator/notblank.php | 0 .../orm/validator/notnull.php | 0 ipf/{ => legacy_orm}/orm/validator/past.php | 0 ipf/{ => legacy_orm}/orm/validator/range.php | 0 .../orm/validator/readonly.php | 0 ipf/{ => legacy_orm}/orm/validator/regexp.php | 0 ipf/{ => legacy_orm}/orm/validator/time.php | 0 .../orm/validator/timestamp.php | 0 ipf/{ => legacy_orm}/orm/validator/unique.php | 0 .../orm/validator/unsigned.php | 0 .../orm/validator/uploadto.php | 0 .../orm/validator/usstate.php | 0 .../orm/validator/verbose.php | 0 120 files changed, 405 insertions(+) create mode 100644 ipf/legacy_orm/app.php create mode 100644 ipf/legacy_orm/commands/buildcontribmodels.php create mode 100644 ipf/legacy_orm/commands/buildmodels.php create mode 100644 ipf/legacy_orm/commands/fixtures.php create mode 100644 ipf/legacy_orm/commands/sql.php create mode 100644 ipf/legacy_orm/commands/syncdb.php create mode 100644 ipf/legacy_orm/modelform.php rename ipf/{ => legacy_orm}/orm.php (100%) rename ipf/{ => legacy_orm}/orm/access.php (100%) rename ipf/{ => legacy_orm}/orm/adapter.php (100%) rename ipf/{ => legacy_orm}/orm/cache/interface.php (100%) rename ipf/{ => legacy_orm}/orm/collection.php (100%) rename ipf/{ => legacy_orm}/orm/configurable.php (100%) rename ipf/{ => legacy_orm}/orm/connection.php (100%) rename ipf/{ => legacy_orm}/orm/connection/module.php (100%) rename ipf/{ => legacy_orm}/orm/connection/mysql.php (100%) rename ipf/{ => legacy_orm}/orm/connection/statement.php (100%) rename ipf/{ => legacy_orm}/orm/connection/unitofwork.php (100%) rename ipf/{ => legacy_orm}/orm/event.php (100%) rename ipf/{ => legacy_orm}/orm/exception.php (100%) rename ipf/{ => legacy_orm}/orm/exception/adapter.php (100%) rename ipf/{ => legacy_orm}/orm/exception/connection.php (100%) rename ipf/{ => legacy_orm}/orm/exception/locator.php (100%) rename ipf/{ => legacy_orm}/orm/exception/mysql.php (100%) rename ipf/{ => legacy_orm}/orm/exception/orm.php (100%) rename ipf/{ => legacy_orm}/orm/exception/profiler.php (100%) rename ipf/{ => legacy_orm}/orm/exception/validator.php (100%) rename ipf/{ => legacy_orm}/orm/export.php (100%) rename ipf/{ => legacy_orm}/orm/export/mysql.php (100%) rename ipf/{ => legacy_orm}/orm/expression.php (100%) rename ipf/{ => legacy_orm}/orm/expression/driver.php (100%) rename ipf/{ => legacy_orm}/orm/expression/mysql.php (100%) rename ipf/{ => legacy_orm}/orm/hydrator.php (100%) rename ipf/{ => legacy_orm}/orm/hydrator/abstract.php (100%) rename ipf/{ => legacy_orm}/orm/hydrator/arraydriver.php (100%) rename ipf/{ => legacy_orm}/orm/hydrator/recorddriver.php (100%) rename ipf/{ => legacy_orm}/orm/import/builder.php (100%) rename ipf/{ => legacy_orm}/orm/import/schema.php (100%) rename ipf/{ => legacy_orm}/orm/inflector.php (100%) rename ipf/{ => legacy_orm}/orm/manager.php (100%) rename ipf/{ => legacy_orm}/orm/null.php (100%) rename ipf/{ => legacy_orm}/orm/pager.php (100%) rename ipf/{ => legacy_orm}/orm/pager/layout.php (100%) rename ipf/{ => legacy_orm}/orm/pager/layoutarrows.php (100%) rename ipf/{ => legacy_orm}/orm/pager/range.php (100%) rename ipf/{ => legacy_orm}/orm/pager/range/jumping.php (100%) rename ipf/{ => legacy_orm}/orm/pager/range/sliding.php (100%) rename ipf/{ => legacy_orm}/orm/query.php (100%) rename ipf/{ => legacy_orm}/orm/query/abstract.php (100%) rename ipf/{ => legacy_orm}/orm/query/check.php (100%) rename ipf/{ => legacy_orm}/orm/query/condition.php (100%) rename ipf/{ => legacy_orm}/orm/query/filter.php (100%) rename ipf/{ => legacy_orm}/orm/query/filter/chain.php (100%) rename ipf/{ => legacy_orm}/orm/query/filter/interface.php (100%) rename ipf/{ => legacy_orm}/orm/query/from.php (100%) rename ipf/{ => legacy_orm}/orm/query/groupby.php (100%) rename ipf/{ => legacy_orm}/orm/query/having.php (100%) rename ipf/{ => legacy_orm}/orm/query/joincondition.php (100%) rename ipf/{ => legacy_orm}/orm/query/limit.php (100%) rename ipf/{ => legacy_orm}/orm/query/offset.php (100%) rename ipf/{ => legacy_orm}/orm/query/orderby.php (100%) rename ipf/{ => legacy_orm}/orm/query/parser.php (100%) rename ipf/{ => legacy_orm}/orm/query/part.php (100%) rename ipf/{ => legacy_orm}/orm/query/registry.php (100%) rename ipf/{ => legacy_orm}/orm/query/select.php (100%) rename ipf/{ => legacy_orm}/orm/query/set.php (100%) rename ipf/{ => legacy_orm}/orm/query/tokenizer.php (100%) rename ipf/{ => legacy_orm}/orm/query/where.php (100%) rename ipf/{ => legacy_orm}/orm/rawsql.php (100%) rename ipf/{ => legacy_orm}/orm/record.php (100%) rename ipf/{ => legacy_orm}/orm/record/abstract.php (100%) rename ipf/{ => legacy_orm}/orm/record/iterator.php (100%) rename ipf/{ => legacy_orm}/orm/relation.php (100%) rename ipf/{ => legacy_orm}/orm/relation/association.php (100%) rename ipf/{ => legacy_orm}/orm/relation/foreignkey.php (100%) rename ipf/{ => legacy_orm}/orm/relation/localkey.php (100%) rename ipf/{ => legacy_orm}/orm/relation/nest.php (100%) rename ipf/{ => legacy_orm}/orm/relation/parser.php (100%) rename ipf/{ => legacy_orm}/orm/table.php (100%) rename ipf/{ => legacy_orm}/orm/table/repository.php (100%) rename ipf/{ => legacy_orm}/orm/template.php (100%) rename ipf/{ => legacy_orm}/orm/template/listener/orderable.php (100%) rename ipf/{ => legacy_orm}/orm/template/listener/owned.php (100%) rename ipf/{ => legacy_orm}/orm/template/listener/sluggable.php (100%) rename ipf/{ => legacy_orm}/orm/template/listener/timestampable.php (100%) rename ipf/{ => legacy_orm}/orm/template/orderable.php (100%) rename ipf/{ => legacy_orm}/orm/template/owned.php (100%) rename ipf/{ => legacy_orm}/orm/template/sluggable.php (100%) rename ipf/{ => legacy_orm}/orm/template/timestampable.php (100%) rename ipf/{ => legacy_orm}/orm/transaction.php (100%) rename ipf/{ => legacy_orm}/orm/transaction/mysql.php (100%) rename ipf/{ => legacy_orm}/orm/utils.php (100%) rename ipf/{ => legacy_orm}/orm/validator.php (100%) rename ipf/{ => legacy_orm}/orm/validator/country.php (100%) rename ipf/{ => legacy_orm}/orm/validator/creditcard.php (100%) rename ipf/{ => legacy_orm}/orm/validator/date.php (100%) rename ipf/{ => legacy_orm}/orm/validator/driver.php (100%) rename ipf/{ => legacy_orm}/orm/validator/email.php (100%) rename ipf/{ => legacy_orm}/orm/validator/exclude.php (100%) rename ipf/{ => legacy_orm}/orm/validator/file.php (100%) rename ipf/{ => legacy_orm}/orm/validator/future.php (100%) rename ipf/{ => legacy_orm}/orm/validator/html.php (100%) rename ipf/{ => legacy_orm}/orm/validator/htmlcolor.php (100%) rename ipf/{ => legacy_orm}/orm/validator/image.php (100%) rename ipf/{ => legacy_orm}/orm/validator/ip.php (100%) rename ipf/{ => legacy_orm}/orm/validator/minlength.php (100%) rename ipf/{ => legacy_orm}/orm/validator/nospace.php (100%) rename ipf/{ => legacy_orm}/orm/validator/notblank.php (100%) rename ipf/{ => legacy_orm}/orm/validator/notnull.php (100%) rename ipf/{ => legacy_orm}/orm/validator/past.php (100%) rename ipf/{ => legacy_orm}/orm/validator/range.php (100%) rename ipf/{ => legacy_orm}/orm/validator/readonly.php (100%) rename ipf/{ => legacy_orm}/orm/validator/regexp.php (100%) rename ipf/{ => legacy_orm}/orm/validator/time.php (100%) rename ipf/{ => legacy_orm}/orm/validator/timestamp.php (100%) rename ipf/{ => legacy_orm}/orm/validator/unique.php (100%) rename ipf/{ => legacy_orm}/orm/validator/unsigned.php (100%) rename ipf/{ => legacy_orm}/orm/validator/uploadto.php (100%) rename ipf/{ => legacy_orm}/orm/validator/usstate.php (100%) rename ipf/{ => legacy_orm}/orm/validator/verbose.php (100%) diff --git a/ipf/legacy_orm/app.php b/ipf/legacy_orm/app.php new file mode 100644 index 0000000..0376699 --- /dev/null +++ b/ipf/legacy_orm/app.php @@ -0,0 +1,21 @@ +frameworkApps() as $app) { + $models = IPF_ORM::generateModelsFromYaml($app->path, $extraAllwedReferences); + $extraAllwedReferences = array_merge($extraAllwedReferences, $models); + } + } +} + diff --git a/ipf/legacy_orm/commands/buildmodels.php b/ipf/legacy_orm/commands/buildmodels.php new file mode 100644 index 0000000..3aa84b5 --- /dev/null +++ b/ipf/legacy_orm/commands/buildmodels.php @@ -0,0 +1,30 @@ +customApps() as $app) + $paths[] = $app->getPath(); + + $extraAllowedReferences = $this->frameworkModels($project); + IPF_ORM::generateModelsFromYaml($paths, $extraAllowedReferences); + } + + private function frameworkModels($project) + { + $models = array(); + foreach ($project->frameworkApps() as $app) + $models = array_merge($models, $app->modelList()); + return $models; + } +} + diff --git a/ipf/legacy_orm/commands/fixtures.php b/ipf/legacy_orm/commands/fixtures.php new file mode 100644 index 0000000..0b5689a --- /dev/null +++ b/ipf/legacy_orm/commands/fixtures.php @@ -0,0 +1,68 @@ +customApps() as $app) + $paths[] = $app->path; + + $fixtures = array(); + foreach ($paths as $path) { + $path .= DIRECTORY_SEPARATOR.'fixtures.php'; + if (is_file($path)) + $fixtures = array_merge($fixtures, require $path); + } + + if (!count($fixtures)) { + echo "No fixtures found\n"; + return; + } + + foreach ($fixtures as $fixture) { + $modelClass = $fixture['model']; + $key = $fixture['key']; + if (!is_array($key)) + $key = array($key); + $records = $fixture['records']; + echo "Loading $modelClass "; + $table = IPF_ORM::getTable($modelClass); + $table->getConnection()->beginTransaction(); + + $query = $table + ->createQuery() + ->limit(1); + foreach ($key as $k) + $query->addWhere($k . ' = ?'); + + foreach ($records as $record) { + $params = array(); + foreach ($key as $k) + $params[] = $record[$k]; + + $model = $query->execute($params); + if ($model) + $model = $model[0]; + else + $model = new $modelClass; + + foreach ($record as $k => $v) + $model->$k = $v; + + $model->save(); + echo '.'; + } + $table->getConnection()->commit(); + echo "\n"; + } + } +} + diff --git a/ipf/legacy_orm/commands/sql.php b/ipf/legacy_orm/commands/sql.php new file mode 100644 index 0000000..5bc9c2d --- /dev/null +++ b/ipf/legacy_orm/commands/sql.php @@ -0,0 +1,25 @@ +frameworkApps() as $app) + $sql .= IPF_ORM::generateSqlFromModels($app)."\n"; + + foreach ($project->customApps() as $app) + $sql .= IPF_ORM::generateSqlFromModels($app)."\n"; + + print $sql; + } +} + diff --git a/ipf/legacy_orm/commands/syncdb.php b/ipf/legacy_orm/commands/syncdb.php new file mode 100644 index 0000000..cf1afcc --- /dev/null +++ b/ipf/legacy_orm/commands/syncdb.php @@ -0,0 +1,21 @@ +appList() as $app) + $models = array_merge($models, $app->modelList()); + + IPF_ORM::createTablesFromModels($models); + } +} + diff --git a/ipf/legacy_orm/modelform.php b/ipf/legacy_orm/modelform.php new file mode 100644 index 0000000..e2fa258 --- /dev/null +++ b/ipf/legacy_orm/modelform.php @@ -0,0 +1,219 @@ +model = $extra['model']; + else + throw new IPF_Exception_Form(__('Unknown model for form')); + + if (isset($extra['user_fields'])) + $this->user_fields = $extra['user_fields']; + + $exclude = \PFF\Arr::get($extra, 'exclude', array()); + $fields = $this->suggestFields($this->model->getTable(), $this->fields(), $exclude, $this); + foreach ($fields as $field) { + list($n, $f) = $field; + $this->fields[$n] = $f; + } + } + + public static function suggestFields($table, $fields=null, $exclude=array(), $form=null) + { + $result = array(); + + $db_columns = $table->getColumns(); + $db_relations = $table->getRelations(); + + if ($fields === null) { + foreach ($db_columns as $name => $col) { + if (array_search($name, $exclude) !== false) + continue; + if (isset($col['exclude']) && $col['exclude']) + continue; + + if ($form && method_exists($form, 'add__'.$name.'__field')) { + $f = call_user_func(array($form, 'add__'.$name.'__field')); + if ($f) + $field = array($name, $f); + } else { + $field = self::createDBField($name, $table, $col); + } + + if ($field) + $result[] = $field; + } + + foreach ($db_relations as $name => $relation) { + if (array_search($name, $exclude) !== false) + continue; + if (isset($relation['exclude']) && $relation['exclude']) + continue; + + if ($form && method_exists($form, 'add__'.$name.'__field')) { + $f = call_user_func(array($form, 'add__'.$name.'__field')); + if ($f) + $field = array($name, $f); + } else { + $field = self::createDBRelation($name, $relation, $db_columns); + } + + if ($field) + $result[] = $field; + } + } else { + foreach ($fields as $uname) { + $field = null; + if ($form && method_exists($form, 'add__'.$uname.'__field')) { + $f = call_user_func(array($form, 'add__'.$uname.'__field')); + if ($f) + $field = array($uname, $f); + } elseif (array_key_exists($uname, $db_columns)) { + $field = self::createDBField($uname, $table, $db_columns[$uname]); + } elseif (array_key_exists($uname, $db_relations)) { + $field = self::createDBRelation($uname, $db_relations[$uname], $db_columns); + } else { + throw new IPF_Exception_Form(sprintf(__("Model '%s' has no column '%s'."), $table->getComponentName(), $uname)); + } + if ($field) + $result[] = $field; + } + } + return $result; + } + + public static function createDBField($name, $table, $col) + { + if ($name == $table->getIdentifier()) + return null; + + $required = isset($col['notblank']) && $col['notblank']; + $label = isset($col['verbose']) ? $col['verbose'] : IPF_Utils::humanTitle($name); + + $params = array( + 'required' => $required, + 'label' => $label, + 'help_text' => '', + ); + + switch ($col['type']) { + case 'string': + if (isset($col['length'])) + $params['max_length'] = (int)($col['length']); + + if (isset($col['uploadTo'])) + $params['uploadTo'] = $col['uploadTo']; + + if (isset($col['email']) && $col['email']) { $form_field = new IPF_Form_Field_Email($params); } + elseif (isset($col['file']) && $col['file']) { $form_field = new IPF_Form_Field_File($params); } + elseif (isset($col['image']) && $col['image']) { $form_field = new IPF_Form_Field_Image($params); } + elseif (isset($col['html']) && $col['html']) { $form_field = new IPF_Form_Field_Html($params); } + else { $form_field = new IPF_Form_Field_Varchar($params); } + + break; + case 'boolean': + $form_field = new IPF_Form_Field_Boolean($params); + break; + case 'integer': + $params['widget_attrs'] = array('style' => 'width:140px;'); + $form_field = new IPF_Form_Field_Integer($params); + break; + case 'double': + case 'decimal': + $params['widget_attrs'] = array('style' => 'width:140px;'); + $form_field = new IPF_Form_Field_Float($params); + break; + case 'date': + $format = IPF::get('date_format'); + if ($format) + $params['widget_attrs'] = array('format' => $format); + $form_field = new IPF_Form_Field_Date($params); + break; + case 'datetime': + case 'timestamp': + $format = IPF::get('datetime_format'); + if ($format) + $params['widget_attrs'] = array('format' => $format); + $form_field = new IPF_Form_Field_Datetime($params); + break; + default: + throw new IPF_Exception_Form(__('Unsupported column type \''.$col['type'].'\'.')); + } + + if ($form_field !== null) + return array($name, $form_field); + else + return null; + } + + public static function createDBRelation($name, $relation, $db_columns) + { + $rt = $relation->getType(); + if ($rt !== IPF_ORM_Relation::ONE_AGGREGATE && $rt !== IPF_ORM_Relation::MANY_AGGREGATE) + return null; + + $lfn = $relation->getLocalFieldName(); + if (isset($db_columns[$lfn])) + $col = $db_columns[$lfn]; + else + $col = array(); + + $table = IPF_ORM::getTable($relation->getClass()); + + $params = array( + 'required' => isset($col['notblank']), + 'label' => isset($col['verbose']) ? $col['verbose'] : IPF_Utils::humanTitle($name), + 'help_text' => '', + 'table' => $table, + 'model' => $relation->getClass(), + ); + + if ($rt === IPF_ORM_Relation::ONE_AGGREGATE) { + $params['queryset'] = $table->findAll(); + return array($name.'_id', new IPF_Form_Field_ModelChoice($params)); + } elseif ($rt === IPF_ORM_Relation::MANY_AGGREGATE) { + + $pk = $table->getIdentifier(); + $choices = array(); + foreach ($table->findAll() as $o) { + $choices[$o->__toString()] = $o->$pk; + } + + $params['choices'] = $choices; + $params['widget'] = 'IPF_Form_Widget_SelectMultipleInput'; + return array($name, new IPF_Form_Field_ModelMultipleChoice($params)); + } else { + return null; + } + } + + function fields() + { + return $this->user_fields; + } + + function save($commit=true) + { + if (!$this->isValid()) + throw new IPF_Exception_Form(__('Cannot save the model from an invalid form.')); + + $this->model->SetFromFormData($this->cleaned_data); + $this->model->save(); + $rels = $this->model->getTable()->getRelations(); + foreach ($rels as $rname => $rel) { + if (isset($this->cleaned_data[$rname])) { + $this->model->unlink($rel->getAlias()); + if (is_array($this->cleaned_data[$rname])) { + $this->model->link($rel->getAlias(),$this->cleaned_data[$rname]); + } + } + } + return $this->model; + } +} + diff --git a/ipf/orm.php b/ipf/legacy_orm/orm.php similarity index 100% rename from ipf/orm.php rename to ipf/legacy_orm/orm.php diff --git a/ipf/orm/access.php b/ipf/legacy_orm/orm/access.php similarity index 100% rename from ipf/orm/access.php rename to ipf/legacy_orm/orm/access.php diff --git a/ipf/orm/adapter.php b/ipf/legacy_orm/orm/adapter.php similarity index 100% rename from ipf/orm/adapter.php rename to ipf/legacy_orm/orm/adapter.php diff --git a/ipf/orm/cache/interface.php b/ipf/legacy_orm/orm/cache/interface.php similarity index 100% rename from ipf/orm/cache/interface.php rename to ipf/legacy_orm/orm/cache/interface.php diff --git a/ipf/orm/collection.php b/ipf/legacy_orm/orm/collection.php similarity index 100% rename from ipf/orm/collection.php rename to ipf/legacy_orm/orm/collection.php diff --git a/ipf/orm/configurable.php b/ipf/legacy_orm/orm/configurable.php similarity index 100% rename from ipf/orm/configurable.php rename to ipf/legacy_orm/orm/configurable.php diff --git a/ipf/orm/connection.php b/ipf/legacy_orm/orm/connection.php similarity index 100% rename from ipf/orm/connection.php rename to ipf/legacy_orm/orm/connection.php diff --git a/ipf/orm/connection/module.php b/ipf/legacy_orm/orm/connection/module.php similarity index 100% rename from ipf/orm/connection/module.php rename to ipf/legacy_orm/orm/connection/module.php diff --git a/ipf/orm/connection/mysql.php b/ipf/legacy_orm/orm/connection/mysql.php similarity index 100% rename from ipf/orm/connection/mysql.php rename to ipf/legacy_orm/orm/connection/mysql.php diff --git a/ipf/orm/connection/statement.php b/ipf/legacy_orm/orm/connection/statement.php similarity index 100% rename from ipf/orm/connection/statement.php rename to ipf/legacy_orm/orm/connection/statement.php diff --git a/ipf/orm/connection/unitofwork.php b/ipf/legacy_orm/orm/connection/unitofwork.php similarity index 100% rename from ipf/orm/connection/unitofwork.php rename to ipf/legacy_orm/orm/connection/unitofwork.php diff --git a/ipf/orm/event.php b/ipf/legacy_orm/orm/event.php similarity index 100% rename from ipf/orm/event.php rename to ipf/legacy_orm/orm/event.php diff --git a/ipf/orm/exception.php b/ipf/legacy_orm/orm/exception.php similarity index 100% rename from ipf/orm/exception.php rename to ipf/legacy_orm/orm/exception.php diff --git a/ipf/orm/exception/adapter.php b/ipf/legacy_orm/orm/exception/adapter.php similarity index 100% rename from ipf/orm/exception/adapter.php rename to ipf/legacy_orm/orm/exception/adapter.php diff --git a/ipf/orm/exception/connection.php b/ipf/legacy_orm/orm/exception/connection.php similarity index 100% rename from ipf/orm/exception/connection.php rename to ipf/legacy_orm/orm/exception/connection.php diff --git a/ipf/orm/exception/locator.php b/ipf/legacy_orm/orm/exception/locator.php similarity index 100% rename from ipf/orm/exception/locator.php rename to ipf/legacy_orm/orm/exception/locator.php diff --git a/ipf/orm/exception/mysql.php b/ipf/legacy_orm/orm/exception/mysql.php similarity index 100% rename from ipf/orm/exception/mysql.php rename to ipf/legacy_orm/orm/exception/mysql.php diff --git a/ipf/orm/exception/orm.php b/ipf/legacy_orm/orm/exception/orm.php similarity index 100% rename from ipf/orm/exception/orm.php rename to ipf/legacy_orm/orm/exception/orm.php diff --git a/ipf/orm/exception/profiler.php b/ipf/legacy_orm/orm/exception/profiler.php similarity index 100% rename from ipf/orm/exception/profiler.php rename to ipf/legacy_orm/orm/exception/profiler.php diff --git a/ipf/orm/exception/validator.php b/ipf/legacy_orm/orm/exception/validator.php similarity index 100% rename from ipf/orm/exception/validator.php rename to ipf/legacy_orm/orm/exception/validator.php diff --git a/ipf/orm/export.php b/ipf/legacy_orm/orm/export.php similarity index 100% rename from ipf/orm/export.php rename to ipf/legacy_orm/orm/export.php diff --git a/ipf/orm/export/mysql.php b/ipf/legacy_orm/orm/export/mysql.php similarity index 100% rename from ipf/orm/export/mysql.php rename to ipf/legacy_orm/orm/export/mysql.php diff --git a/ipf/orm/expression.php b/ipf/legacy_orm/orm/expression.php similarity index 100% rename from ipf/orm/expression.php rename to ipf/legacy_orm/orm/expression.php diff --git a/ipf/orm/expression/driver.php b/ipf/legacy_orm/orm/expression/driver.php similarity index 100% rename from ipf/orm/expression/driver.php rename to ipf/legacy_orm/orm/expression/driver.php diff --git a/ipf/orm/expression/mysql.php b/ipf/legacy_orm/orm/expression/mysql.php similarity index 100% rename from ipf/orm/expression/mysql.php rename to ipf/legacy_orm/orm/expression/mysql.php diff --git a/ipf/orm/hydrator.php b/ipf/legacy_orm/orm/hydrator.php similarity index 100% rename from ipf/orm/hydrator.php rename to ipf/legacy_orm/orm/hydrator.php diff --git a/ipf/orm/hydrator/abstract.php b/ipf/legacy_orm/orm/hydrator/abstract.php similarity index 100% rename from ipf/orm/hydrator/abstract.php rename to ipf/legacy_orm/orm/hydrator/abstract.php diff --git a/ipf/orm/hydrator/arraydriver.php b/ipf/legacy_orm/orm/hydrator/arraydriver.php similarity index 100% rename from ipf/orm/hydrator/arraydriver.php rename to ipf/legacy_orm/orm/hydrator/arraydriver.php diff --git a/ipf/orm/hydrator/recorddriver.php b/ipf/legacy_orm/orm/hydrator/recorddriver.php similarity index 100% rename from ipf/orm/hydrator/recorddriver.php rename to ipf/legacy_orm/orm/hydrator/recorddriver.php diff --git a/ipf/orm/import/builder.php b/ipf/legacy_orm/orm/import/builder.php similarity index 100% rename from ipf/orm/import/builder.php rename to ipf/legacy_orm/orm/import/builder.php diff --git a/ipf/orm/import/schema.php b/ipf/legacy_orm/orm/import/schema.php similarity index 100% rename from ipf/orm/import/schema.php rename to ipf/legacy_orm/orm/import/schema.php diff --git a/ipf/orm/inflector.php b/ipf/legacy_orm/orm/inflector.php similarity index 100% rename from ipf/orm/inflector.php rename to ipf/legacy_orm/orm/inflector.php diff --git a/ipf/orm/manager.php b/ipf/legacy_orm/orm/manager.php similarity index 100% rename from ipf/orm/manager.php rename to ipf/legacy_orm/orm/manager.php diff --git a/ipf/orm/null.php b/ipf/legacy_orm/orm/null.php similarity index 100% rename from ipf/orm/null.php rename to ipf/legacy_orm/orm/null.php diff --git a/ipf/orm/pager.php b/ipf/legacy_orm/orm/pager.php similarity index 100% rename from ipf/orm/pager.php rename to ipf/legacy_orm/orm/pager.php diff --git a/ipf/orm/pager/layout.php b/ipf/legacy_orm/orm/pager/layout.php similarity index 100% rename from ipf/orm/pager/layout.php rename to ipf/legacy_orm/orm/pager/layout.php diff --git a/ipf/orm/pager/layoutarrows.php b/ipf/legacy_orm/orm/pager/layoutarrows.php similarity index 100% rename from ipf/orm/pager/layoutarrows.php rename to ipf/legacy_orm/orm/pager/layoutarrows.php diff --git a/ipf/orm/pager/range.php b/ipf/legacy_orm/orm/pager/range.php similarity index 100% rename from ipf/orm/pager/range.php rename to ipf/legacy_orm/orm/pager/range.php diff --git a/ipf/orm/pager/range/jumping.php b/ipf/legacy_orm/orm/pager/range/jumping.php similarity index 100% rename from ipf/orm/pager/range/jumping.php rename to ipf/legacy_orm/orm/pager/range/jumping.php diff --git a/ipf/orm/pager/range/sliding.php b/ipf/legacy_orm/orm/pager/range/sliding.php similarity index 100% rename from ipf/orm/pager/range/sliding.php rename to ipf/legacy_orm/orm/pager/range/sliding.php diff --git a/ipf/orm/query.php b/ipf/legacy_orm/orm/query.php similarity index 100% rename from ipf/orm/query.php rename to ipf/legacy_orm/orm/query.php diff --git a/ipf/orm/query/abstract.php b/ipf/legacy_orm/orm/query/abstract.php similarity index 100% rename from ipf/orm/query/abstract.php rename to ipf/legacy_orm/orm/query/abstract.php diff --git a/ipf/orm/query/check.php b/ipf/legacy_orm/orm/query/check.php similarity index 100% rename from ipf/orm/query/check.php rename to ipf/legacy_orm/orm/query/check.php diff --git a/ipf/orm/query/condition.php b/ipf/legacy_orm/orm/query/condition.php similarity index 100% rename from ipf/orm/query/condition.php rename to ipf/legacy_orm/orm/query/condition.php diff --git a/ipf/orm/query/filter.php b/ipf/legacy_orm/orm/query/filter.php similarity index 100% rename from ipf/orm/query/filter.php rename to ipf/legacy_orm/orm/query/filter.php diff --git a/ipf/orm/query/filter/chain.php b/ipf/legacy_orm/orm/query/filter/chain.php similarity index 100% rename from ipf/orm/query/filter/chain.php rename to ipf/legacy_orm/orm/query/filter/chain.php diff --git a/ipf/orm/query/filter/interface.php b/ipf/legacy_orm/orm/query/filter/interface.php similarity index 100% rename from ipf/orm/query/filter/interface.php rename to ipf/legacy_orm/orm/query/filter/interface.php diff --git a/ipf/orm/query/from.php b/ipf/legacy_orm/orm/query/from.php similarity index 100% rename from ipf/orm/query/from.php rename to ipf/legacy_orm/orm/query/from.php diff --git a/ipf/orm/query/groupby.php b/ipf/legacy_orm/orm/query/groupby.php similarity index 100% rename from ipf/orm/query/groupby.php rename to ipf/legacy_orm/orm/query/groupby.php diff --git a/ipf/orm/query/having.php b/ipf/legacy_orm/orm/query/having.php similarity index 100% rename from ipf/orm/query/having.php rename to ipf/legacy_orm/orm/query/having.php diff --git a/ipf/orm/query/joincondition.php b/ipf/legacy_orm/orm/query/joincondition.php similarity index 100% rename from ipf/orm/query/joincondition.php rename to ipf/legacy_orm/orm/query/joincondition.php diff --git a/ipf/orm/query/limit.php b/ipf/legacy_orm/orm/query/limit.php similarity index 100% rename from ipf/orm/query/limit.php rename to ipf/legacy_orm/orm/query/limit.php diff --git a/ipf/orm/query/offset.php b/ipf/legacy_orm/orm/query/offset.php similarity index 100% rename from ipf/orm/query/offset.php rename to ipf/legacy_orm/orm/query/offset.php diff --git a/ipf/orm/query/orderby.php b/ipf/legacy_orm/orm/query/orderby.php similarity index 100% rename from ipf/orm/query/orderby.php rename to ipf/legacy_orm/orm/query/orderby.php diff --git a/ipf/orm/query/parser.php b/ipf/legacy_orm/orm/query/parser.php similarity index 100% rename from ipf/orm/query/parser.php rename to ipf/legacy_orm/orm/query/parser.php diff --git a/ipf/orm/query/part.php b/ipf/legacy_orm/orm/query/part.php similarity index 100% rename from ipf/orm/query/part.php rename to ipf/legacy_orm/orm/query/part.php diff --git a/ipf/orm/query/registry.php b/ipf/legacy_orm/orm/query/registry.php similarity index 100% rename from ipf/orm/query/registry.php rename to ipf/legacy_orm/orm/query/registry.php diff --git a/ipf/orm/query/select.php b/ipf/legacy_orm/orm/query/select.php similarity index 100% rename from ipf/orm/query/select.php rename to ipf/legacy_orm/orm/query/select.php diff --git a/ipf/orm/query/set.php b/ipf/legacy_orm/orm/query/set.php similarity index 100% rename from ipf/orm/query/set.php rename to ipf/legacy_orm/orm/query/set.php diff --git a/ipf/orm/query/tokenizer.php b/ipf/legacy_orm/orm/query/tokenizer.php similarity index 100% rename from ipf/orm/query/tokenizer.php rename to ipf/legacy_orm/orm/query/tokenizer.php diff --git a/ipf/orm/query/where.php b/ipf/legacy_orm/orm/query/where.php similarity index 100% rename from ipf/orm/query/where.php rename to ipf/legacy_orm/orm/query/where.php diff --git a/ipf/orm/rawsql.php b/ipf/legacy_orm/orm/rawsql.php similarity index 100% rename from ipf/orm/rawsql.php rename to ipf/legacy_orm/orm/rawsql.php diff --git a/ipf/orm/record.php b/ipf/legacy_orm/orm/record.php similarity index 100% rename from ipf/orm/record.php rename to ipf/legacy_orm/orm/record.php diff --git a/ipf/orm/record/abstract.php b/ipf/legacy_orm/orm/record/abstract.php similarity index 100% rename from ipf/orm/record/abstract.php rename to ipf/legacy_orm/orm/record/abstract.php diff --git a/ipf/orm/record/iterator.php b/ipf/legacy_orm/orm/record/iterator.php similarity index 100% rename from ipf/orm/record/iterator.php rename to ipf/legacy_orm/orm/record/iterator.php diff --git a/ipf/orm/relation.php b/ipf/legacy_orm/orm/relation.php similarity index 100% rename from ipf/orm/relation.php rename to ipf/legacy_orm/orm/relation.php diff --git a/ipf/orm/relation/association.php b/ipf/legacy_orm/orm/relation/association.php similarity index 100% rename from ipf/orm/relation/association.php rename to ipf/legacy_orm/orm/relation/association.php diff --git a/ipf/orm/relation/foreignkey.php b/ipf/legacy_orm/orm/relation/foreignkey.php similarity index 100% rename from ipf/orm/relation/foreignkey.php rename to ipf/legacy_orm/orm/relation/foreignkey.php diff --git a/ipf/orm/relation/localkey.php b/ipf/legacy_orm/orm/relation/localkey.php similarity index 100% rename from ipf/orm/relation/localkey.php rename to ipf/legacy_orm/orm/relation/localkey.php diff --git a/ipf/orm/relation/nest.php b/ipf/legacy_orm/orm/relation/nest.php similarity index 100% rename from ipf/orm/relation/nest.php rename to ipf/legacy_orm/orm/relation/nest.php diff --git a/ipf/orm/relation/parser.php b/ipf/legacy_orm/orm/relation/parser.php similarity index 100% rename from ipf/orm/relation/parser.php rename to ipf/legacy_orm/orm/relation/parser.php diff --git a/ipf/orm/table.php b/ipf/legacy_orm/orm/table.php similarity index 100% rename from ipf/orm/table.php rename to ipf/legacy_orm/orm/table.php diff --git a/ipf/orm/table/repository.php b/ipf/legacy_orm/orm/table/repository.php similarity index 100% rename from ipf/orm/table/repository.php rename to ipf/legacy_orm/orm/table/repository.php diff --git a/ipf/orm/template.php b/ipf/legacy_orm/orm/template.php similarity index 100% rename from ipf/orm/template.php rename to ipf/legacy_orm/orm/template.php diff --git a/ipf/orm/template/listener/orderable.php b/ipf/legacy_orm/orm/template/listener/orderable.php similarity index 100% rename from ipf/orm/template/listener/orderable.php rename to ipf/legacy_orm/orm/template/listener/orderable.php diff --git a/ipf/orm/template/listener/owned.php b/ipf/legacy_orm/orm/template/listener/owned.php similarity index 100% rename from ipf/orm/template/listener/owned.php rename to ipf/legacy_orm/orm/template/listener/owned.php diff --git a/ipf/orm/template/listener/sluggable.php b/ipf/legacy_orm/orm/template/listener/sluggable.php similarity index 100% rename from ipf/orm/template/listener/sluggable.php rename to ipf/legacy_orm/orm/template/listener/sluggable.php diff --git a/ipf/orm/template/listener/timestampable.php b/ipf/legacy_orm/orm/template/listener/timestampable.php similarity index 100% rename from ipf/orm/template/listener/timestampable.php rename to ipf/legacy_orm/orm/template/listener/timestampable.php diff --git a/ipf/orm/template/orderable.php b/ipf/legacy_orm/orm/template/orderable.php similarity index 100% rename from ipf/orm/template/orderable.php rename to ipf/legacy_orm/orm/template/orderable.php diff --git a/ipf/orm/template/owned.php b/ipf/legacy_orm/orm/template/owned.php similarity index 100% rename from ipf/orm/template/owned.php rename to ipf/legacy_orm/orm/template/owned.php diff --git a/ipf/orm/template/sluggable.php b/ipf/legacy_orm/orm/template/sluggable.php similarity index 100% rename from ipf/orm/template/sluggable.php rename to ipf/legacy_orm/orm/template/sluggable.php diff --git a/ipf/orm/template/timestampable.php b/ipf/legacy_orm/orm/template/timestampable.php similarity index 100% rename from ipf/orm/template/timestampable.php rename to ipf/legacy_orm/orm/template/timestampable.php diff --git a/ipf/orm/transaction.php b/ipf/legacy_orm/orm/transaction.php similarity index 100% rename from ipf/orm/transaction.php rename to ipf/legacy_orm/orm/transaction.php diff --git a/ipf/orm/transaction/mysql.php b/ipf/legacy_orm/orm/transaction/mysql.php similarity index 100% rename from ipf/orm/transaction/mysql.php rename to ipf/legacy_orm/orm/transaction/mysql.php diff --git a/ipf/orm/utils.php b/ipf/legacy_orm/orm/utils.php similarity index 100% rename from ipf/orm/utils.php rename to ipf/legacy_orm/orm/utils.php diff --git a/ipf/orm/validator.php b/ipf/legacy_orm/orm/validator.php similarity index 100% rename from ipf/orm/validator.php rename to ipf/legacy_orm/orm/validator.php diff --git a/ipf/orm/validator/country.php b/ipf/legacy_orm/orm/validator/country.php similarity index 100% rename from ipf/orm/validator/country.php rename to ipf/legacy_orm/orm/validator/country.php diff --git a/ipf/orm/validator/creditcard.php b/ipf/legacy_orm/orm/validator/creditcard.php similarity index 100% rename from ipf/orm/validator/creditcard.php rename to ipf/legacy_orm/orm/validator/creditcard.php diff --git a/ipf/orm/validator/date.php b/ipf/legacy_orm/orm/validator/date.php similarity index 100% rename from ipf/orm/validator/date.php rename to ipf/legacy_orm/orm/validator/date.php diff --git a/ipf/orm/validator/driver.php b/ipf/legacy_orm/orm/validator/driver.php similarity index 100% rename from ipf/orm/validator/driver.php rename to ipf/legacy_orm/orm/validator/driver.php diff --git a/ipf/orm/validator/email.php b/ipf/legacy_orm/orm/validator/email.php similarity index 100% rename from ipf/orm/validator/email.php rename to ipf/legacy_orm/orm/validator/email.php diff --git a/ipf/orm/validator/exclude.php b/ipf/legacy_orm/orm/validator/exclude.php similarity index 100% rename from ipf/orm/validator/exclude.php rename to ipf/legacy_orm/orm/validator/exclude.php diff --git a/ipf/orm/validator/file.php b/ipf/legacy_orm/orm/validator/file.php similarity index 100% rename from ipf/orm/validator/file.php rename to ipf/legacy_orm/orm/validator/file.php diff --git a/ipf/orm/validator/future.php b/ipf/legacy_orm/orm/validator/future.php similarity index 100% rename from ipf/orm/validator/future.php rename to ipf/legacy_orm/orm/validator/future.php diff --git a/ipf/orm/validator/html.php b/ipf/legacy_orm/orm/validator/html.php similarity index 100% rename from ipf/orm/validator/html.php rename to ipf/legacy_orm/orm/validator/html.php diff --git a/ipf/orm/validator/htmlcolor.php b/ipf/legacy_orm/orm/validator/htmlcolor.php similarity index 100% rename from ipf/orm/validator/htmlcolor.php rename to ipf/legacy_orm/orm/validator/htmlcolor.php diff --git a/ipf/orm/validator/image.php b/ipf/legacy_orm/orm/validator/image.php similarity index 100% rename from ipf/orm/validator/image.php rename to ipf/legacy_orm/orm/validator/image.php diff --git a/ipf/orm/validator/ip.php b/ipf/legacy_orm/orm/validator/ip.php similarity index 100% rename from ipf/orm/validator/ip.php rename to ipf/legacy_orm/orm/validator/ip.php diff --git a/ipf/orm/validator/minlength.php b/ipf/legacy_orm/orm/validator/minlength.php similarity index 100% rename from ipf/orm/validator/minlength.php rename to ipf/legacy_orm/orm/validator/minlength.php diff --git a/ipf/orm/validator/nospace.php b/ipf/legacy_orm/orm/validator/nospace.php similarity index 100% rename from ipf/orm/validator/nospace.php rename to ipf/legacy_orm/orm/validator/nospace.php diff --git a/ipf/orm/validator/notblank.php b/ipf/legacy_orm/orm/validator/notblank.php similarity index 100% rename from ipf/orm/validator/notblank.php rename to ipf/legacy_orm/orm/validator/notblank.php diff --git a/ipf/orm/validator/notnull.php b/ipf/legacy_orm/orm/validator/notnull.php similarity index 100% rename from ipf/orm/validator/notnull.php rename to ipf/legacy_orm/orm/validator/notnull.php diff --git a/ipf/orm/validator/past.php b/ipf/legacy_orm/orm/validator/past.php similarity index 100% rename from ipf/orm/validator/past.php rename to ipf/legacy_orm/orm/validator/past.php diff --git a/ipf/orm/validator/range.php b/ipf/legacy_orm/orm/validator/range.php similarity index 100% rename from ipf/orm/validator/range.php rename to ipf/legacy_orm/orm/validator/range.php diff --git a/ipf/orm/validator/readonly.php b/ipf/legacy_orm/orm/validator/readonly.php similarity index 100% rename from ipf/orm/validator/readonly.php rename to ipf/legacy_orm/orm/validator/readonly.php diff --git a/ipf/orm/validator/regexp.php b/ipf/legacy_orm/orm/validator/regexp.php similarity index 100% rename from ipf/orm/validator/regexp.php rename to ipf/legacy_orm/orm/validator/regexp.php diff --git a/ipf/orm/validator/time.php b/ipf/legacy_orm/orm/validator/time.php similarity index 100% rename from ipf/orm/validator/time.php rename to ipf/legacy_orm/orm/validator/time.php diff --git a/ipf/orm/validator/timestamp.php b/ipf/legacy_orm/orm/validator/timestamp.php similarity index 100% rename from ipf/orm/validator/timestamp.php rename to ipf/legacy_orm/orm/validator/timestamp.php diff --git a/ipf/orm/validator/unique.php b/ipf/legacy_orm/orm/validator/unique.php similarity index 100% rename from ipf/orm/validator/unique.php rename to ipf/legacy_orm/orm/validator/unique.php diff --git a/ipf/orm/validator/unsigned.php b/ipf/legacy_orm/orm/validator/unsigned.php similarity index 100% rename from ipf/orm/validator/unsigned.php rename to ipf/legacy_orm/orm/validator/unsigned.php diff --git a/ipf/orm/validator/uploadto.php b/ipf/legacy_orm/orm/validator/uploadto.php similarity index 100% rename from ipf/orm/validator/uploadto.php rename to ipf/legacy_orm/orm/validator/uploadto.php diff --git a/ipf/orm/validator/usstate.php b/ipf/legacy_orm/orm/validator/usstate.php similarity index 100% rename from ipf/orm/validator/usstate.php rename to ipf/legacy_orm/orm/validator/usstate.php diff --git a/ipf/orm/validator/verbose.php b/ipf/legacy_orm/orm/validator/verbose.php similarity index 100% rename from ipf/orm/validator/verbose.php rename to ipf/legacy_orm/orm/validator/verbose.php -- 2.49.0