diff --git a/typo3/sysext/form/Classes/Utility/CompatibilityLayerUtility.php b/typo3/sysext/form/Classes/Utility/CompatibilityLayerUtility.php index a3680797a4321a6fd35cfb4587281a4f7499d630..27d126784f8247d61cbd49360616cbc35eab0289 100644 --- a/typo3/sysext/form/Classes/Utility/CompatibilityLayerUtility.php +++ b/typo3/sysext/form/Classes/Utility/CompatibilityLayerUtility.php @@ -201,6 +201,13 @@ class CompatibilityLayerUtility { $formContainerWrap = explode($containerWrapReturn['marker'], $formLayout); $layout['containerInnerWrap'] = $formContainerWrap; $element->setLayout($layout); + $classFromLayout = $this->getElementClassFromLayout('form'); + if (!empty($classFromLayout)) { + if (!empty($element->getAdditionalArgument('class'))) { + $classFromLayout .= ' ' . $element->getAdditionalArgument('class'); + } + $element->setAdditionalArgument('class', $classFromLayout); + } return; } if (in_array($element->getElementType(), $this->registeredFormElements)) { @@ -288,7 +295,7 @@ class CompatibilityLayerUtility { if ($dom) { $node = $dom->firstChild; if ($node) { - if (strlen($node->getAttribute('class')) > 0) { + if ($node->getAttribute('class') !== '') { $class = $node->getAttribute('class') . ' '; } $class .= 'csc-form-' . $element->getElementCounter() . ' csc-form-element csc-form-element-' . $element->getElementTypeLowerCase(); @@ -351,6 +358,13 @@ class CompatibilityLayerUtility { $layout = $element->getLayout(); $layout['containerInnerWrap'] = $containerWrap; $element->setLayout($layout); + $classFromLayout = $this->getElementClassFromLayout('fieldset'); + if (!empty($classFromLayout)) { + if (!empty($element->getHtmlAttribute('class'))) { + $classFromLayout .= ' ' . $element->getHtmlAttribute('class'); + } + $element->setHtmlAttribute('class', $classFromLayout); + } } return; } @@ -371,6 +385,31 @@ class CompatibilityLayerUtility { return $html; } + /** + * Return the class attribute for a element defined by layout. + * + * @param string $elementName + * @return string + */ + protected function getElementClassFromLayout($elementName = '') { + $class = ''; + $libxmlUseInternalErrors = libxml_use_internal_errors(true); + $dom = new \DOMDocument('1.0', 'utf-8'); + $dom->formatOutput = TRUE; + $dom->preserveWhiteSpace = FALSE; + if ($dom->loadXML($this->getGlobalLayoutByElementType(strtoupper($elementName)))) { + $nodes = $dom->getElementsByTagName($elementName); + if ($nodes->length) { + $node = $nodes->item(0); + if ($node && $node->getAttribute('class') !== '') { + $class = $node->getAttribute('class'); + } + } + } + libxml_use_internal_errors($libxmlUseInternalErrors); + return $class; + } + /** * Try to explode the element layout into 2 parts to get the * outer wrapping