diff --git a/includes/form.inc b/includes/form.inc index 40363d6..c500103 100644 --- a/includes/form.inc +++ b/includes/form.inc @@ -4034,6 +4034,21 @@ function element_validate_number($element, &$form_state) { } /** + * Filter out a form element's array keys that have empty values. + * + * This replaces the FAPI hack $form['array_filter'] with the more elegant + * $form['item']['#element_validate'] = array('drupal_filter_form_array'); + * + * @param $element + * An associative array containing the structure of the form element. + * @param $form_state + * A keyed array containing the current state of the form. + */ +function drupal_filter_form_array($element, &$form_state) { + $form_state['values'][$element['#name']] = array_keys(array_filter($form_state['values'][$element['#name']])); +} + +/** * @} End of "defgroup form_api". */ diff --git a/modules/book/book.admin.inc b/modules/book/book.admin.inc index 7b9dea3..5539d2c 100644 --- a/modules/book/book.admin.inc +++ b/modules/book/book.admin.inc @@ -37,6 +37,7 @@ function book_admin_settings() { '#options' => $types, '#description' => t('Users with the %outline-perm permission can add all content types.', array('%outline-perm' => t('Administer book outlines'))), '#required' => TRUE, + '#element_validate' => array('drupal_filter_form_array'), ); $form['book_child_type'] = array( '#type' => 'radios', @@ -45,7 +46,6 @@ function book_admin_settings() { '#options' => $types, '#required' => TRUE, ); - $form['array_filter'] = array('#type' => 'value', '#value' => TRUE); $form['#validate'][] = 'book_admin_settings_validate'; return system_settings_form($form); diff --git a/modules/system/system.install b/modules/system/system.install index 6d80c43..baf5311 100644 --- a/modules/system/system.install +++ b/modules/system/system.install @@ -1627,6 +1627,11 @@ function system_update_last_removed() { */ function system_update_8000() { // Fill in the first update to Drupal 8 when needed. + $ret = array(); + variable_del('array_filter'); + $ret[] = array('success' => TRUE, 'query' => "variable_del('array_filter')"); + + return $ret; } /** diff --git a/modules/system/system.module b/modules/system/system.module index 946ef0c..ea66922 100644 --- a/modules/system/system.module +++ b/modules/system/system.module @@ -2759,9 +2759,6 @@ function system_settings_form_submit($form, &$form_state) { form_state_values_clean($form_state); foreach ($form_state['values'] as $key => $value) { - if (is_array($value) && isset($form_state['values']['array_filter'])) { - $value = array_keys(array_filter($value)); - } variable_set($key, $value); }