diff --git a/core/includes/form.inc b/core/includes/form.inc
index a12fb34..3c20215 100644
--- a/core/includes/form.inc
+++ b/core/includes/form.inc
@@ -2847,6 +2847,7 @@ function form_process_date($element) {
}
$element['#tree'] = TRUE;
+ $element['#composite'] = TRUE;
// Determine the order of day, month, year in the site's chosen date format.
$format = variable_get('date_format_short', 'm/d/Y - H:i');
@@ -2938,6 +2939,7 @@ function weight_value(&$form) {
function form_process_radios($element) {
if (count($element['#options']) > 0) {
$weight = 0;
+ $element['#composite'] = TRUE;
foreach ($element['#options'] as $key => $choice) {
// Maintain order of options as defined in #options, in case the element
// defines custom option sub-elements, but does not define all option
@@ -3071,6 +3073,7 @@ function form_process_checkboxes($element) {
$element['#default_value'] = array();
}
$weight = 0;
+ $element['#composite'] = TRUE;
foreach ($element['#options'] as $key => $choice) {
// Integer 0 is not a valid #return_value, so use '0' instead.
// @see form_type_checkbox_value().
@@ -3900,36 +3903,69 @@ function theme_form_element($variables) {
}
$output = '
' . "\n";
+ // Composite elements consist of more than one HTML form control. These must
+ // be grouped by a fieldset.
+ $composite = false;
+ if (isset($element['#composite']) && $element['#composite'] === true) {
+ $composite = true;
+ }
+
+ if ($composite) {
+ $output .= '';
+ }
+
$output .= "