summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
authorDries Buytaert <dries@buytaert.net>2009-10-15 11:47:25 +0000
committerDries Buytaert <dries@buytaert.net>2009-10-15 11:47:25 +0000
commitc5c46c739c5ef2b9170a67c501db7967ca814b3b (patch)
tree4e95facf308ec57ead2edcb7e0dd3b43fe988202 /modules
parent3cb2a5eff420a00a3579df5ed7950f8d5c761bce (diff)
downloadbrdo-c5c46c739c5ef2b9170a67c501db7967ca814b3b.tar.gz
brdo-c5c46c739c5ef2b9170a67c501db7967ca814b3b.tar.bz2
- Patch #594650 by sun, c960657: provide central ()['values'] clearance.
Diffstat (limited to 'modules')
-rw-r--r--modules/simpletest/tests/form.test49
-rw-r--r--modules/simpletest/tests/form_test.module32
-rw-r--r--modules/system/system.module2
-rw-r--r--modules/user/user.module3
-rw-r--r--modules/user/user.pages.inc3
5 files changed, 86 insertions, 3 deletions
diff --git a/modules/simpletest/tests/form.test b/modules/simpletest/tests/form.test
index fb922ec8c..f6dbb85b8 100644
--- a/modules/simpletest/tests/form.test
+++ b/modules/simpletest/tests/form.test
@@ -463,3 +463,52 @@ class FormsFormWrapperTestCase extends DrupalWebTestCase {
}
}
+/**
+ * Test $form_state clearance.
+ */
+class FormStateValuesCleanTestCase extends DrupalWebTestCase {
+ public static function getInfo() {
+ return array(
+ 'name' => 'Form state values clearance',
+ 'description' => 'Test proper removal of submitted form values using form_state_values_clean().',
+ 'group' => 'Form API',
+ );
+ }
+
+ function setUp() {
+ parent::setUp('form_test');
+ }
+
+ /**
+ * Tests form_state_values_clean().
+ */
+ function testFormStateValuesClean() {
+ $this->drupalPost('form_test/form-state-values-clean', array(), t('Submit'));
+ $values = json_decode($this->content, TRUE);
+
+ // Setup the expected result.
+ $result = array(
+ 'beer' => 1000,
+ 'baz' => array('beer' => 2000),
+ );
+
+ // Verify that all internal Form API elements were removed.
+ $this->assertFalse(isset($values['form_id']), t('%element was removed.', array('%element' => 'form_id')));
+ $this->assertFalse(isset($values['form_token']), t('%element was removed.', array('%element' => 'form_token')));
+ $this->assertFalse(isset($values['form_build_id']), t('%element was removed.', array('%element' => 'form_build_id')));
+ $this->assertFalse(isset($values['op']), t('%element was removed.', array('%element' => 'op')));
+
+ // Verify that all buttons were removed.
+ $this->assertFalse(isset($values['foo']), t('%element was removed.', array('%element' => 'foo')));
+ $this->assertFalse(isset($values['bar']), t('%element was removed.', array('%element' => 'bar')));
+ $this->assertFalse(isset($values['baz']['foo']), t('%element was removed.', array('%element' => 'foo')));
+ $this->assertFalse(isset($values['baz']['baz']), t('%element was removed.', array('%element' => 'baz')));
+
+ // Verify that nested form value still exists.
+ $this->assertTrue(isset($values['baz']['beer']), t('Nested form value still exists.'));
+
+ // Verify that actual form values equal resulting form values.
+ $this->assertEqual($values, $result, t('Expected form values equal actual form values.'));
+ }
+}
+
diff --git a/modules/simpletest/tests/form_test.module b/modules/simpletest/tests/form_test.module
index ee47b4f14..a502e8e8a 100644
--- a/modules/simpletest/tests/form_test.module
+++ b/modules/simpletest/tests/form_test.module
@@ -62,6 +62,14 @@ function form_test_menu() {
'type' => MENU_CALLBACK,
);
+ $items['form_test/form-state-values-clean'] = array(
+ 'title' => 'Form state values clearance test',
+ 'page callback' => 'drupal_get_form',
+ 'page arguments' => array('form_test_form_state_values_clean_form'),
+ 'access arguments' => array('access content'),
+ 'type' => MENU_CALLBACK,
+ );
+
return $items;
}
@@ -361,3 +369,27 @@ function form_test_wrapper_callback_form($form, &$form_state) {
return $form;
}
+/**
+ * Form builder for form_state_values_clean() test.
+ */
+function form_test_form_state_values_clean_form($form, &$form_state) {
+ // Build an example form containing multiple submit and button elements; not
+ // only on the top-level.
+ $form = array('#tree' => TRUE);
+ $form['foo'] = array('#type' => 'submit', '#value' => t('Submit'));
+ $form['bar'] = array('#type' => 'submit', '#value' => t('Submit'));
+ $form['beer'] = array('#type' => 'value', '#value' => 1000);
+ $form['baz']['foo'] = array('#type' => 'button', '#value' => t('Submit'));
+ $form['baz']['baz'] = array('#type' => 'submit', '#value' => t('Submit'));
+ $form['baz']['beer'] = array('#type' => 'value', '#value' => 2000);
+ return $form;
+}
+
+/**
+ * Form submit handler for form_state_values_clean() test form.
+ */
+function form_test_form_state_values_clean_form_submit($form, &$form_state) {
+ form_state_values_clean($form_state);
+ drupal_json_output($form_state['values']);
+ exit;
+}
diff --git a/modules/system/system.module b/modules/system/system.module
index a4c1ff883..a6278b485 100644
--- a/modules/system/system.module
+++ b/modules/system/system.module
@@ -2332,7 +2332,7 @@ function system_settings_form($form, $automatic_defaults = TRUE) {
*/
function system_settings_form_submit($form, &$form_state) {
// Exclude unnecessary elements.
- unset($form_state['values']['submit'], $form_state['values']['reset'], $form_state['values']['form_id'], $form_state['values']['op'], $form_state['values']['form_token'], $form_state['values']['form_build_id']);
+ form_state_values_clean($form_state);
foreach ($form_state['values'] as $key => $value) {
if (is_array($value) && isset($form_state['values']['array_filter'])) {
diff --git a/modules/user/user.module b/modules/user/user.module
index 3a0dded2a..2d400f54c 100644
--- a/modules/user/user.module
+++ b/modules/user/user.module
@@ -3116,7 +3116,8 @@ function user_register_submit($form, &$form_state) {
// The unset below is needed to prevent these form values from being saved as
// user data.
- unset($form_state['values']['form_token'], $form_state['values']['submit'], $form_state['values']['op'], $form_state['values']['notify'], $form_state['values']['form_id'], $form_state['values']['affiliates'], $form_state['values']['destination'], $form_state['values']['form_build_id']);
+ form_state_values_clean($form_state);
+ unset($form_state['values']['notify']);
$form_state['values']['pass'] = $pass;
$form_state['values']['init'] = $form_state['values']['mail'];
diff --git a/modules/user/user.pages.inc b/modules/user/user.pages.inc
index fc88e395a..1f94e421d 100644
--- a/modules/user/user.pages.inc
+++ b/modules/user/user.pages.inc
@@ -269,7 +269,8 @@ function user_profile_form_validate($form, &$form_state) {
function user_profile_form_submit($form, &$form_state) {
$account = $form['#user'];
$category = $form['#user_category'];
- unset($form_state['values']['op'], $form_state['values']['submit'], $form_state['values']['cancel'], $form_state['values']['form_token'], $form_state['values']['form_id'], $form_state['values']['form_build_id']);
+ // Remove unneeded values.
+ form_state_values_clean($form_state);
$edit = (object)$form_state['values'];
field_attach_submit('user', $edit, $form, $form_state);