From f5d7375c15587cbd5da33d6ea517be47f3d97e61 Mon Sep 17 00:00:00 2001 From: Neil Drumm <drumm@3064.no-reply.drupal.org> Date: Fri, 25 Aug 2006 07:58:48 +0000 Subject: [PATCH] #80471 by Eaton and chx. Fix handling of default values in programmatically submitted forms. --- includes/form.inc | 65 +++++++++++++++++++++++++---------------------- 1 file changed, 35 insertions(+), 30 deletions(-) diff --git a/includes/form.inc b/includes/form.inc index ae4397e93311..ee5d194c65e7 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'])) { -- GitLab