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'] - . static::options($subList, $options) . $groupIndent . '' . $options['format.eol']; + if (\is_array($groupAttribs)) { + $groupAttribs = ArrayHelper::toString($groupAttribs); + } + + $html .= $groupIndent + . '' + . $options['format.eol'] + . static::options($subList, $options) + . $groupIndent + . '' + . $options['format.eol']; } }