From 3f767774c474676a24dac426e53c9bd87ec9a890 Mon Sep 17 00:00:00 2001 From: Sam Georges Date: Sat, 31 May 2014 10:40:11 +1000 Subject: [PATCH] Add a new global method getDropdownOptions() for specifying dropdown values Dropdown overrides now supply the key value and form field name where appropriate. --- modules/backend/widgets/Form.php | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/modules/backend/widgets/Form.php b/modules/backend/widgets/Form.php index 1298176d4..46980509b 100644 --- a/modules/backend/widgets/Form.php +++ b/modules/backend/widgets/Form.php @@ -357,6 +357,11 @@ class Form extends WidgetBase $field->arrayName = $this->arrayName; $field->idPrefix = $this->getId(); + /* + * Set field value + */ + $field->value = $this->getFieldValue($field); + /* * Simple widget field, only widget type is supplied */ @@ -416,11 +421,6 @@ class Form extends WidgetBase if (array_key_exists('disabled', $config)) $field->disabled = $config['disabled']; if (array_key_exists('stretch', $config)) $field->stretch = $config['stretch']; - /* - * Set field value - */ - $field->value = $this->getFieldValue($field); - return $field; } @@ -595,16 +595,19 @@ class Form extends WidgetBase { if (!$fieldOptions) { $methodName = 'get'.studly_case($field->columnName).'Options'; - if (!method_exists($this->model, $methodName)) + if (!method_exists($this->model, $methodName) && !method_exists($this->model, 'getDropdownOptions')) throw new ApplicationException(Lang::get('backend::lang.field.options_method_not_exists', ['model'=>get_class($this->model), 'method'=>$methodName, 'field'=>$field->columnName])); - $fieldOptions = $this->model->$methodName(); + if (method_exists($this->model, $methodName)) + $fieldOptions = $this->model->$methodName($field->value); + + $fieldOptions = $this->model->getDropdownOptions($field->columnName, $field->value); } else if (is_string($fieldOptions)) { if (!method_exists($this->model, $fieldOptions)) throw new ApplicationException(Lang::get('backend::lang.field.options_method_not_exists', ['model'=>get_class($this->model), 'method'=>$fieldOptions, 'field'=>$field->columnName])); - $fieldOptions = $this->model->$fieldOptions(); + $fieldOptions = $this->model->$fieldOptions($field->value, $field->columnName); } return $fieldOptions;