diff --git a/includes/form.inc b/includes/form.inc
index 8f2ee26..2c224ee 100644
--- a/includes/form.inc
+++ b/includes/form.inc
@@ -2788,6 +2788,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');
@@ -2879,6 +2880,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
@@ -3012,6 +3014,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().
@@ -3841,36 +3844,67 @@ 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 .= "