diff --git a/includes/form.inc b/includes/form.inc index e112773914c5ed13b6abcceeb046ae6ad99ddd25..170cfc35b263246b5a686211f58a76db9ea46ff1 100644 --- a/includes/form.inc +++ b/includes/form.inc @@ -111,7 +111,8 @@ function drupal_get_form($form_id, &$form, $callback = NULL) { $function($form_id, $form); } - $form = form_builder($form_id, $form); + form_builder($form_id, $form); + if (!empty($_POST['edit']) && (($_POST['edit']['form_id'] == $form_id) || ($_POST['edit']['form_id'] == $callback))) { drupal_validate_form($form_id, $form, $callback); if ($form_submitted && !form_get_errors()) { @@ -157,15 +158,6 @@ function drupal_get_form($form_id, &$form, $callback = NULL) { function drupal_validate_form($form_id, &$form, $callback = NULL) { global $form_values; - // we need a copy of form_values otherwise foreach falls into an infite loop - $copy = (array)$form_values; - // this loop breaks the references in form_values thus makes it impossible for - // validate functions to modify the $form_values array - foreach ($copy as $k => $v) { - unset($form_values[$k]); - $form_values[$k] = $v; - } - if (isset($form['#token'])) { if ($form_values['form_token'] != md5(session_id() . $form['#token'] . variable_get('drupal_private_key', ''))) { // setting this error will cause the form to fail validation @@ -316,7 +308,7 @@ function form_error(&$element, $message = '') { * @param $form * An associative array containing the structure of the form. */ -function form_builder($form_id, $form) { +function form_builder($form_id, &$form) { global $form_values; global $form_submitted; /* Use element defaults */ @@ -425,7 +417,7 @@ function form_builder($form_id, $form) { if (!isset($form[$key]['#weight'])) { $form[$key]['#weight'] = $count/1000; } - $form[$key] = form_builder($form_id, $form[$key]); + form_builder($form_id, $form[$key]); $count++; } @@ -434,8 +426,6 @@ function form_builder($form_id, $form) { $form = $function($form, $form_values); $form['#after_build_done'] = TRUE; } - - return $form; } /** diff --git a/modules/poll.module b/modules/poll.module index 1087f742fb57debe537678c94236be53fdaf5d4a..7c16ee3521c30c0c5121c8ab42a98dbfb60ff042 100644 --- a/modules/poll.module +++ b/modules/poll.module @@ -133,7 +133,7 @@ function poll_form(&$node) { $form['choice']['choices'] = array('#type' => 'hidden', '#default_value' => max(2, count($node->choice) ? count($node->choice) : 5)); $form['choice']['morechoices'] = array('#type' => 'checkbox', '#title' => t('Need more choices'), '#default_value' => 0, '#description' => t("If the amount of boxes above isn't enough, check this box and click the Preview button below to add some more."), '#weight' => 1); - $form['choice'] = form_builder('poll_node_form', $form['choice']); + form_builder('poll_node_form', $form['choice']); if ($form['choice']['morechoices']['#value']) { $form['choice']['morechoices']['#value'] = 0; $form['choice']['choices']['#value'] *= 2; diff --git a/modules/poll/poll.module b/modules/poll/poll.module index 1087f742fb57debe537678c94236be53fdaf5d4a..7c16ee3521c30c0c5121c8ab42a98dbfb60ff042 100644 --- a/modules/poll/poll.module +++ b/modules/poll/poll.module @@ -133,7 +133,7 @@ function poll_form(&$node) { $form['choice']['choices'] = array('#type' => 'hidden', '#default_value' => max(2, count($node->choice) ? count($node->choice) : 5)); $form['choice']['morechoices'] = array('#type' => 'checkbox', '#title' => t('Need more choices'), '#default_value' => 0, '#description' => t("If the amount of boxes above isn't enough, check this box and click the Preview button below to add some more."), '#weight' => 1); - $form['choice'] = form_builder('poll_node_form', $form['choice']); + form_builder('poll_node_form', $form['choice']); if ($form['choice']['morechoices']['#value']) { $form['choice']['morechoices']['#value'] = 0; $form['choice']['choices']['#value'] *= 2; diff --git a/modules/upload.module b/modules/upload.module index 46d582400d48cb97d2981ad617193e1f064140ed..50b249ede4d320b5b5c00bb1a7ff98f072512e8c 100644 --- a/modules/upload.module +++ b/modules/upload.module @@ -640,7 +640,7 @@ function upload_js() { _upload_validate($node); $form = _upload_form($node); - $form = form_builder('upload_js', $form); + form_builder('upload_js', $form); $output = theme('status_messages') . form_render($form); // We send the updated file attachments form. diff --git a/modules/upload/upload.module b/modules/upload/upload.module index 46d582400d48cb97d2981ad617193e1f064140ed..50b249ede4d320b5b5c00bb1a7ff98f072512e8c 100644 --- a/modules/upload/upload.module +++ b/modules/upload/upload.module @@ -640,7 +640,7 @@ function upload_js() { _upload_validate($node); $form = _upload_form($node); - $form = form_builder('upload_js', $form); + form_builder('upload_js', $form); $output = theme('status_messages') . form_render($form); // We send the updated file attachments form.