]> git.andy128k.dev Git - ipf-legacy-orm.git/commitdiff
fixes in adminmodel form
authorAndrey Kutejko <andy128k@gmail.com>
Sun, 7 Sep 2014 20:59:14 +0000 (23:59 +0300)
committerAndrey Kutejko <andy128k@gmail.com>
Sun, 7 Sep 2014 20:59:14 +0000 (23:59 +0300)
ipf/legacy_orm/adminmodel.php

index 5b5027071dd247e7d5170251c9ff8b24227149db..75d0b94498f3151e50ec82938b132fc7f005aea7 100644 (file)
@@ -223,15 +223,23 @@ class IPF_Admin_ModelForm extends IPF_Form_Model
 {
     private $inlines = array();
 
-    function __construct($data=null, $model=null, $modelName='', $extra=array())
+    function __construct($data=null, $model=null, $modelClass='', $extra=array())
     {
-        if ($model) {
-            // edit
-            $extra['model'] = $model;
-            $extra['initial'] = $this->getFormData($model);
-        } else {
-            // add
-            $extra['model'] = new $modelName;
+        $editMode = $model !== null;
+
+        if (!$model)
+            $model = new $modelClass;
+
+        $extra['model'] = $model;
+
+        if ($extra['inlines']) {
+            foreach ($extra['inlines'] as $inlineClassName) {
+                $this->inlines[] = new $inlineClassName($model);
+            }
+        }
+
+        if ($editMode) {
+            $extra['initial'] = $this->getFormData($model, $this->inlines);
         }
 
         parent::__construct($data, $extra);
@@ -241,11 +249,8 @@ class IPF_Admin_ModelForm extends IPF_Form_Model
     {
         parent::initFields($extra);
 
-        if ($extra['inlines']) {
+        if ($this->inlines) {
             $this->field_groups[] = array('fields' => array_keys($this->fields));
-            foreach ($extra['inlines'] as $inlineClassName) {
-                $this->inlines[] = new $inlineClassName($extra['model']);
-            }
         }
 
         foreach ($this->inlines as $inline) {
@@ -259,7 +264,7 @@ class IPF_Admin_ModelForm extends IPF_Form_Model
         }
     }
 
-    private function getFormData($o)
+    private function getFormData($o, $inlines)
     {
         $data = $o->getData();
         foreach ($o->getTable()->getRelations() as $rname => $rel) {
@@ -274,16 +279,14 @@ class IPF_Admin_ModelForm extends IPF_Form_Model
             }
         }
 
-        foreach ($this->inlines() as $inlineName => $inlineClassName) {
-            $inlineInstance = new $inlineClassName($o, null);
-
+        foreach ($inlines as $inline) {
             $objs = array();
-            foreach ($inlineInstance->getObjects() as $io) {
+            foreach ($inline->getObjects() as $io) {
                 $d = $io->getData();
                 $d['id'] = $io->pk();
                 $objs[] = $d;
             }
-            $data[$inlineName] = $objs;
+            $data[$inline->getModelName()] = $objs;
         }
 
         return $data;