summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNeil Drumm <drumm@3064.no-reply.drupal.org>2006-08-25 07:58:48 +0000
committerNeil Drumm <drumm@3064.no-reply.drupal.org>2006-08-25 07:58:48 +0000
commitf5d7375c15587cbd5da33d6ea517be47f3d97e61 (patch)
treedb1666c9ed0fa8cca2369ed0611b6f67adc59932
parentbb8d583f4ca3cf2b14ce15b6307f6b01b46dd9fa (diff)
downloadbrdo-f5d7375c15587cbd5da33d6ea517be47f3d97e61.tar.gz
brdo-f5d7375c15587cbd5da33d6ea517be47f3d97e61.tar.bz2
#80471 by Eaton and chx. Fix handling of default values in programmatically submitted forms.
-rw-r--r--includes/form.inc65
1 files changed, 35 insertions, 30 deletions
diff --git a/includes/form.inc b/includes/form.inc
index ae4397e93..ee5d194c6 100644
--- a/includes/form.inc
+++ b/includes/form.inc
@@ -500,38 +500,43 @@ function form_builder($form_id, $form) {
foreach ($form['#parents'] as $parent) {
$edit = isset($edit[$parent]) ? $edit[$parent] : NULL;
}
- 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);
+ 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();
+ }
}
- else {
- $form['#value'] = array();
+ elseif (isset($edit)) {
+ $form['#value'] = $edit;
}
- }
- 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;
- default:
- if (isset($edit)) {
- $form['#value'] = $edit;
- }
- }
- // Mark all posted values for validation
- if ((isset($form['#value']) && $form['#value'] === $edit) || (isset($form['#required']) && $form['#required'])) {
- $form['#needs_validation'] = TRUE;
+ 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;
+
+ default:
+ if (isset($edit)) {
+ $form['#value'] = $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'])) {