From: Andrey Kutejko Date: Sun, 7 Sep 2014 20:59:14 +0000 (+0300) Subject: fixes in adminmodel form X-Git-Tag: 0.6~14 X-Git-Url: https://git.andy128k.dev/?a=commitdiff_plain;h=d4fb5a2220e3a3f641970188e48b2822e407b71a;p=ipf-legacy-orm.git fixes in adminmodel form --- diff --git a/ipf/legacy_orm/adminmodel.php b/ipf/legacy_orm/adminmodel.php index 5b50270..75d0b94 100644 --- a/ipf/legacy_orm/adminmodel.php +++ b/ipf/legacy_orm/adminmodel.php @@ -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;