diff --git a/libraries/src/HTML/Helpers/Select.php b/libraries/src/HTML/Helpers/Select.php
index bd011baf555d0..4fad3c7b075d7 100644
--- a/libraries/src/HTML/Helpers/Select.php
+++ b/libraries/src/HTML/Helpers/Select.php
@@ -193,7 +193,7 @@ public static function groupedlist($data, $name, $options = [])
// Set default options and overwrite with anything passed in
$options = array_merge(
HTMLHelper::$formatOptions,
- ['format.depth' => 0, 'group.items' => 'items', 'group.label' => 'text', 'group.label.toHtml' => true, 'id' => false],
+ ['format.depth' => 0, 'group.items' => 'items', 'group.label' => 'text', 'group.attr' => 'attr', 'group.class' => 'class', 'group.label.toHtml' => true, 'id' => false],
$options
);
@@ -228,9 +228,11 @@ public static function groupedlist($data, $name, $options = [])
$groupIndent = str_repeat($options['format.indent'], $options['format.depth']++);
foreach ($data as $dataKey => $group) {
- $label = $dataKey;
- $id = '';
- $noGroup = \is_int($dataKey);
+ $label = $dataKey;
+ $id = '';
+ $groupClass = '';
+ $groupAttribs = '';
+ $noGroup = \is_int($dataKey);
if ($options['group.items'] == null) {
// Sub-list is an associative array
@@ -248,6 +250,16 @@ public static function groupedlist($data, $name, $options = [])
$id = $group[$options['group.id']];
$noGroup = false;
}
+
+ if (isset($options['group.class'], $group[$options['group.class']])) {
+ $groupClass = $group[$options['group.class']];
+ $noGroup = false;
+ }
+
+ if (isset($options['group.attr'], $group[$options['group.attr']])) {
+ $groupAttribs = $group[$options['group.attr']];
+ $noGroup = false;
+ }
} elseif (\is_object($group)) {
// Sub-list is in a property of an object
$subList = $group->{$options['group.items']};
@@ -261,6 +273,16 @@ public static function groupedlist($data, $name, $options = [])
$id = $group->{$options['group.id']};
$noGroup = false;
}
+
+ if (isset($options['group.class'], $group->{$options['group.class']})) {
+ $groupClass = $group->{$options['group.class']};
+ $noGroup = false;
+ }
+
+ if (isset($options['group.attr'], $group->{$options['group.attr']})) {
+ $groupAttribs = $group->{$options['group.attr']};
+ $noGroup = false;
+ }
} else {
throw new \RuntimeException('Invalid group contents.', 1);
}
@@ -268,9 +290,22 @@ public static function groupedlist($data, $name, $options = [])
if ($noGroup) {
$html .= static::options($subList, $options);
} else {
- $html .= $groupIndent . '' . $options['format.eol'];
+ if (\is_array($groupAttribs)) {
+ $groupAttribs = ArrayHelper::toString($groupAttribs);
+ }
+
+ $html .= $groupIndent
+ . ''
+ . $options['format.eol'];
}
}