From: Andrey Kutejko Date: Mon, 25 Nov 2013 22:26:24 +0000 (+0200) Subject: simplify model form building X-Git-Tag: 0.5~13 X-Git-Url: https://git.andy128k.dev/?a=commitdiff_plain;h=b8403043f029005594c7f8649e2bccd50d47fd35;p=ipf.git simplify model form building --- diff --git a/ipf/form/db.php b/ipf/form/db.php deleted file mode 100644 index ba72c24..0000000 --- a/ipf/form/db.php +++ /dev/null @@ -1,52 +0,0 @@ -value = $value; - $this->column = $column; - $this->extra = array_merge($this->extra, $extra); - } - - function formField($def, $form_field='IPF_Form_Field_Varchar') - { - $defaults = array( - 'required' => !$def['blank'], - 'label' => IPF_Utils::humanTitle($def['verbose']), - 'help_text' => $def['help_text'], - 'type'=>$this->type, - ); - - unset($def['blank'], $def['verbose'], $def['help_text']); - if (isset($def['default'])) { - $defaults['initial'] = $def['default']; - unset($def['default']); - } - /* - if (isset($def['choices'])) { - $defaults['widget'] = 'IPF_Form_Widget_SelectInput'; - if (isset($def['widget_attrs'])) { - $def['widget_attrs']['choices'] = $def['choices']; - } else { - $def['widget_attrs'] = array('choices' => $def['choices']); - } - } - foreach (array_keys($def) as $key) { - if (!in_array($key, array('max_length','widget', 'label', 'required', - 'initial', 'choices', 'widget_attrs'))) { - unset($def[$key]); - } - } - */ - $params = array_merge($defaults, $def); - return new $form_field($params); - } -} - diff --git a/ipf/form/db/boolean.php b/ipf/form/db/boolean.php deleted file mode 100644 index c526265..0000000 --- a/ipf/form/db/boolean.php +++ /dev/null @@ -1,12 +0,0 @@ -getTable()->findAll(); - $def['model'] = $gmodel; - if ($def['blank']==1) - $def['required'] = false; - else - $def['required'] = true; - return parent::formField($def, $form_field); - } -} diff --git a/ipf/form/db/manytomany.php b/ipf/form/db/manytomany.php deleted file mode 100644 index 6a90a70..0000000 --- a/ipf/form/db/manytomany.php +++ /dev/null @@ -1,22 +0,0 @@ -findAll(); - $pk = IPF_ORM::getTable($def['model'])->getIdentifier(); - $choices = array(); - foreach($list_objects as $o){ - $choices[$o->__toString()] = $o->$pk; - } - $def['choices'] = $choices; - if (!isset($def['widget'])) { - $def['widget'] = 'IPF_Form_Widget_SelectMultipleInput'; - } - return parent::formField($def, $form_field); - } -} - diff --git a/ipf/form/field/modelchoice.php b/ipf/form/field/modelchoice.php index 6f4d595..91c1ee8 100644 --- a/ipf/form/field/modelchoice.php +++ b/ipf/form/field/modelchoice.php @@ -1,14 +1,15 @@ _model = $params['model']; - if (isset($params['queryset'])){ - $choices = array('--------'=>''); + $this->table = $params['table']; + if (isset($params['queryset'])) { + $choices = array('--------' => ''); foreach ($params['queryset'] as $item) { $choices[(string)$item] = $item->id; } @@ -16,12 +17,12 @@ class IPF_Form_Field_ModelChoice extends IPF_Form_Field_Choice{ } } - public function clean($value){ + public function clean($value) + { parent::clean($value); - if (in_array($value, $this->empty_values)) { + if (in_array($value, $this->empty_values)) return null; - } - $o = $this->_model->getTable()->find($value); - return $o; + return $this->table->find($value); } } + diff --git a/ipf/form/model.php b/ipf/form/model.php index ea823c0..a63ae3d 100644 --- a/ipf/form/model.php +++ b/ipf/form/model.php @@ -79,7 +79,6 @@ class IPF_Form_Model extends IPF_Form $params = array( 'required' => $required, - 'editable' => true, 'label' => $label, 'help_text' => '', ); @@ -149,18 +148,33 @@ class IPF_Form_Model extends IPF_Form $defaults = array( 'blank' => !isset($col['notblank']), 'help_text' => '', - 'editable' => true, 'model' => $relation->getClass(), 'verbose' => isset($col['verbose']) ? $col['verbose'] : $name, ); + $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, + ); + if ($rt === IPF_ORM_Relation::ONE_AGGREGATE) { - $name .= "_id"; - $db_field = new IPF_Form_DB_Foreignkey('',$name); - return array($name, $db_field->formField($defaults)); + $params['queryset'] = $table->findAll(); + return array($name.'_id', new IPF_Form_Field_ModelChoice($params)); } elseif ($rt === IPF_ORM_Relation::MANY_AGGREGATE) { - $db_field = new IPF_Form_DB_Manytomany('',$name); - return array($name, $db_field->formField($defaults)); + + $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; }