diff options
author | Dries Buytaert <dries@buytaert.net> | 2007-07-04 15:45:37 +0000 |
---|---|---|
committer | Dries Buytaert <dries@buytaert.net> | 2007-07-04 15:45:37 +0000 |
commit | 8cd661b82b253e1016a5c9db7f898ca62ac27fcb (patch) | |
tree | 3011569c0b54664f175304bf0ba7fc938b5c91ca /includes/form.inc | |
parent | 2ceae6ad581701a0ee72eede787583e9140a5eda (diff) | |
download | brdo-8cd661b82b253e1016a5c9db7f898ca62ac27fcb.tar.gz brdo-8cd661b82b253e1016a5c9db7f898ca62ac27fcb.tar.bz2 |
- Patch #121620 by Eaton, dopry et al: formAPI #type .'_value' callback, remove hardcoded switch from form.inc, has been ready for about one week and required to make the CCK better.
Diffstat (limited to 'includes/form.inc')
-rw-r--r-- | includes/form.inc | 185 |
1 files changed, 126 insertions, 59 deletions
diff --git a/includes/form.inc b/includes/form.inc index f135e685b..40d8c4e7f 100644 --- a/includes/form.inc +++ b/includes/form.inc @@ -791,66 +791,40 @@ function _form_builder_handle_input_element($form_id, &$form, &$form_state) { $form['#id'] = form_clean_id('edit-'. implode('-', $form['#parents'])); } + unset($edit); if (!empty($form['#disabled'])) { $form['#attributes']['disabled'] = 'disabled'; } if (!isset($form['#value']) && !array_key_exists('#value', $form)) { + $function = 'form_type_'. $form['#type'] . '_value'; if (($form['#programmed']) || ((!isset($form['#access']) || $form['#access']) && isset($form['#post']) && (isset($form['#post']['form_id']) && $form['#post']['form_id'] == $form_id))) { $edit = $form['#post']; foreach ($form['#parents'] as $parent) { $edit = isset($edit[$parent]) ? $edit[$parent] : NULL; } if (!$form['#programmed'] || isset($edit)) { - switch ($form['#type']) { - case 'checkbox': - $form['#value'] = !empty($edit) ? $form['#return_value'] : 0; - break; - - case 'select': - if (isset($form['#multiple']) && $form['#multiple']) { - if (isset($edit) && is_array($edit)) { - $form['#value'] = drupal_map_assoc($edit); - } - else { - $form['#value'] = array(); - } - } - elseif (isset($edit)) { - $form['#value'] = $edit; - } - break; - - case 'textfield': - if (isset($edit)) { - // Equate $edit to the form value to ensure it's marked for - // validation. - $edit = str_replace(array("\r", "\n"), '', $edit); - $form['#value'] = $edit; - } - break; - - case 'token': - $form['#value'] = (string)$edit; - break; - - default: - if (isset($edit)) { - $form['#value'] = $edit; - } + // Call #type_value to set the form value; + if (function_exists($function)) { + $form['#value'] = $function($form, $edit); } - // Mark all posted values for validation. - if ((isset($form['#value']) && $form['#value'] === $edit) || (isset($form['#required']) && $form['#required'])) { - $form['#needs_validation'] = TRUE; + if (!isset($form['#value']) && isset($edit)) { + $form['#value'] = $edit; } } + // Mark all posted values for validation. + if (isset($form['#value']) || (isset($form['#required']) && $form['#required'])) { + $form['#needs_validation'] = TRUE; + } } + // Load defaults. if (!isset($form['#value'])) { - $function = 'form_'. $form['#type'] .'_value'; + // Call #type_value without a second argument to request default_value handling. if (function_exists($function)) { - $function($form); + $form['#value'] = $function($form); } - else { + // Final catch. If we haven't set a value yet, use the explicit default value. + if(!isset($form['#value'])) { $form['#value'] = isset($form['#default_value']) ? $form['#default_value'] : ''; } } @@ -904,6 +878,116 @@ function _form_builder_handle_input_element($form_id, &$form, &$form_state) { } /** + * Helper function to determine the value for a checkbox form element. + * + * @param $form + * Form element we are trying to determine a value for. + * @param $edit + * Relevant post data for real value, or NULL for default value + * @return + * Mixed, value to be assigned to element. + */ +function form_type_checkbox_value($form, $edit = NULL) { + if (isset($edit)) { + return !empty($edit) ? $form['#return_value'] : 0; + } +} + +/** + * Helper function to determine the value for a checkboxes form element. + * + * @param $form + * Form element we are trying to determine a value for. + * @param $edit + * Relevant post data for real value, or NULL for default value + * @return + * Mixed, value to be assigned to element. + */ + function form_type_checkboxes_value($form, $edit = NULL) { + if (!isset($edit)) { + $value = array(); + $form += array('#default_value' => array()); + foreach ($form['#default_value'] as $key) { + $value[$key] = 1; + } + return $value; + } +} + +/** + * Helper function to determine the value for a password_confirm form + * element. + * + * @param $form + * Form element we are trying to determine a value for. + * @param $edit + * Relevant post data for real value, or NULL for default value + * @return + * Mixed, value to be assigned to element. + */ +function form_type_password_confirm_value($form, $edit = NULL) { + if (!isset($edit)) { + $form += array('#default_value' => array()); + return $form['#default_value'] + array('pass1' => '', 'pass2' => ''); + } +} + +/** + * Helper function to determine the value for a select form element. + * + * @param $form + * Form element we are trying to determine a value for. + * @param $edit + * Relevant post data for real value, or NULL for default value + * @return + * Mixed, value to be assigned to element. + */ +function form_type_select_value($form, $edit = NULL) { + if (isset($edit)) { + if (isset($form['#multiple']) && $form['#multiple']) { + return (is_array($edit)) ? drupal_map_assoc($edit) : array(); + } + else { + return $edit; + } + } +} + +/** + * Helper function to determine the value for a textfield form element. + * + * @param $form + * Form element we are trying to determine a value for. + * @param $edit + * Relevant post data for real value, or NULL for default value + * @return + * Mixed, value to be assigned to element. + */ +function form_type_textfield_value($form, $edit = NULL) { + if (isset($edit)) { + // Equate $edit to the form value to ensure it's marked for + // validation. + return str_replace(array("\r", "\n"), '', $edit); + } +} + +/** + * Helper function to determine the value for form's token value. + * + * @param $form + * Form element we are trying to determine a value for. + * @param $edit + * Relevant post data for real value, or NULL for default value + * @return + * Mixed, value to be assigned to element. + */ +function form_type_token_value($form, $edit = NULL) { + if (isset($edit)) { + return (string)$edit; + } +} + +/** * Handle the special Internet Explorer one-button-form hit-enter- * instead-of-clicking scenario. */ @@ -1332,23 +1416,6 @@ function map_month($month) { } /** - * Helper function to load value from default value for checkboxes. - */ -function form_checkboxes_value(&$form) { - $value = array(); - $form += array('#default_value' => array()); - foreach ($form['#default_value'] as $key) { - $value[$key] = 1; - } - $form['#value'] = $value; -} - -function password_confirm_value(&$form) { - $form += array('#default_value' => array()); - $form['#value'] = $form['#default_value'] + array('pass1' => '', 'pass2' => ''); -} - -/** * If no default value is set for weight select boxes, use 0. */ function weight_value(&$form) { |