=== modified file 'includes/form.inc' --- includes/form.inc 2008-06-25 09:57:07 +0000 +++ includes/form.inc 2008-06-27 17:33:39 +0000 @@ -838,9 +838,18 @@ function form_error(&$element, $message * context, it is used to accumulate information about which button * was clicked when the form was submitted, as well as the sanitized * $_POST data. + * @param $parent + * The parent of this subform. */ -function form_builder($form_id, $form, &$form_state) { - static $complete_form, $cache; +function form_builder($form_id, $form, &$form_state, &$parent = array()) { + static $complete_form, $cache, $stored_form_id; + + if (!isset($form_id)) { + $form_id = $stored_form_id; + } + else { + $stored_form_id = $form_id; + } // Initialize as unprocessed. $form['#processed'] = FALSE; @@ -860,7 +869,7 @@ function form_builder($form_id, $form, & } if (isset($form['#input']) && $form['#input']) { - _form_builder_handle_input_element($form_id, $form, $form_state, $complete_form); + _form_builder_handle_input_element($form_id, $form, $form_state, $complete_form, $parent); } $form['#defaults_loaded'] = TRUE; @@ -901,7 +910,8 @@ function form_builder($form_id, $form, & // later. unset($form['#sorted']); } - $form[$key] = form_builder($form_id, $form[$key], $form_state); + + $form[$key] = form_builder($form_id, $form[$key], $form_state, $form); $count++; } @@ -943,7 +953,7 @@ function form_builder($form_id, $form, & * can be processed and rendered. Also, execute any #process handlers * attached to a specific element. */ -function _form_builder_handle_input_element($form_id, &$form, &$form_state, $complete_form) { +function _form_builder_handle_input_element($form_id, &$form, &$form_state, $complete_form, &$parent_form) { if (!isset($form['#name'])) { $name = array_shift($form['#parents']); $form['#name'] = $name; @@ -1035,7 +1045,7 @@ function _form_builder_handle_input_elem if (isset($form['#process']) && !$form['#processed']) { foreach ($form['#process'] as $process) { if (drupal_function_exists($process)) { - $form = $process($form, isset($edit) ? $edit : NULL, $form_state, $complete_form); + $form = $process($form, isset($edit) ? $edit : NULL, $form_state, $complete_form, $parent_form); } } $form['#processed'] = TRUE; === modified file 'modules/filter/filter.module' --- modules/filter/filter.module 2008-05-06 12:18:44 +0000 +++ modules/filter/filter.module 2008-06-27 17:35:07 +0000 @@ -457,6 +457,21 @@ function check_markup($text, $format = F } /** + * Add a filter_form to a form. + */ +function filter_form_add($form, $edit, &$form_state, $complete_form, &$parent) { + if (isset($form['#format']) || array_key_exists('#format', $form)) { + $parents = $parent['#tree'] ? $parent['#parents'] : array(); + $parents[] = 'format'; + $parent['format'] = filter_form($form['#format'], $form['#weight'] + 1/10000, $parents); + $parent['format']['#post'] = $form['#post']; + $parent['format']['#programmed'] = $form['#programmed']; + $parent['format'] = form_builder(NULL, $parent['format'], $form_state, $parent); + } + return $form; +} + +/** * Generate a selector for choosing a format in a form. * * @ingroup forms === modified file 'modules/node/node.pages.inc' --- modules/node/node.pages.inc 2008-04-14 17:48:33 +0000 +++ modules/node/node.pages.inc 2008-06-27 17:27:38 +0000 @@ -289,10 +289,9 @@ function node_body_field(&$node, $label, '#default_value' => $include ? $node->body : ($node->teaser . $node->body), '#rows' => 20, '#required' => ($word_count > 0), + '#format' => $node->format, ); - $form['format'] = filter_form($node->format); - return $form; } === modified file 'modules/system/system.module' --- modules/system/system.module 2008-06-25 09:12:24 +0000 +++ modules/system/system.module 2008-06-27 16:22:08 +0000 @@ -229,7 +229,7 @@ function system_elements() { '#cols' => 60, '#rows' => 5, '#resizable' => TRUE, - '#process' => array('form_expand_ahah'), + '#process' => array('form_expand_ahah', 'filter_form_add'), ); $type['radios'] = array(