Skip to content
Snippets Groups Projects
Commit 577bfdc6 authored by David Rothstein's avatar David Rothstein
Browse files

Issue #1414510 by andypost, Spleshka, perelman.yuval, tim.plunkett: Fixed...

Issue #1414510 by andypost, Spleshka, perelman.yuval, tim.plunkett: Fixed Remove drupal_reset_static() for drupal_html_id() when form validation fails.
parent 83554985
No related branches found
No related tags found
No related merge requests found
Drupal 7.17, xxxx-xx-xx (development version)
-----------------------
- Prevented duplicate HTML IDs from appearing when two forms are displayed on
the same page and one of them was submitted with invalid data (minor markup
change).
- Fixed the theme settings form to properly clean up submitted values in
$form_state['values'] when the form is submitted (data structure change).
- Updated various admin tables to use the default "empty table" text UX
......
......@@ -850,7 +850,10 @@ function drupal_process_form($form_id, &$form, &$form_state) {
// cache when a form is processed, so scenarios that result in
// the form being built behind the scenes and again for the
// browser don't increment all the element IDs needlessly.
drupal_static_reset('drupal_html_id');
if (!form_get_errors()) {
// In case of errors, do not break HTML IDs of other forms.
drupal_static_reset('drupal_html_id');
}
if ($form_state['submitted'] && !form_get_errors() && !$form_state['rebuild']) {
// Execute form submit handlers.
......
......@@ -1750,3 +1750,34 @@ class FormCheckboxTestCase extends DrupalWebTestCase {
}
}
}
/**
* Tests uniqueness of generated HTML IDs.
*/
class HTMLIdTestCase extends DrupalWebTestCase {
public static function getInfo() {
return array(
'name' => 'Unique HTML IDs',
'description' => 'Tests functionality of drupal_html_id().',
'group' => 'Form API',
);
}
function setUp() {
parent::setUp('form_test');
}
/**
* Tests that HTML IDs do not get duplicated when form validation fails.
*/
function testHTMLId() {
$this->drupalGet('form-test/double-form');
$this->assertNoDuplicateIds('There are no duplicate IDs');
// Submit second form with empty title.
$edit = array();
$this->drupalPost(NULL, $edit, 'Save', array(), array(), 'form-test-html-id--2');
$this->assertNoDuplicateIds('There are no duplicate IDs');
}
}
......@@ -194,6 +194,12 @@ function form_test_menu() {
'type' => MENU_CALLBACK,
);
}
$items['form-test/double-form'] = array(
'title' => 'Double form test',
'page callback' => 'form_test_double_form',
'access callback' => TRUE,
'type' => MENU_CALLBACK,
);
$items['form-test/load-include-menu'] = array(
'title' => 'FAPI test loading includes',
......@@ -1787,3 +1793,29 @@ function form_test_checkboxes_zero($form, &$form_state, $json = TRUE) {
function _form_test_checkboxes_zero_no_redirect($form, &$form_state) {
$form_state['redirect'] = FALSE;
}
/**
* Menu callback returns two instances of the same form.
*/
function form_test_double_form() {
return array(
'form1' => drupal_get_form('form_test_html_id'),
'form2' => drupal_get_form('form_test_html_id'),
);
}
/**
* Builds a simple form to test duplicate HTML IDs.
*/
function form_test_html_id($form, &$form_state) {
$form['name'] = array(
'#type' => 'textfield',
'#title' => 'name',
'#required' => TRUE,
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => 'Save',
);
return $form;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment