/** * Set the layout for a element * Not supported / ignored: OPTGROUP, OPTION, layout.legend * * @param \TYPO3\CMS\Form\Domain\Model\Element $element * @param array $userConfiguredElementTyposcript The configuration array * @return void * @deprecated since TYPO3 CMS 7, this function will be removed in TYPO3 CMS 8, as the functionality is now done via fluid */ public function setElementLayouts(Element $element, array $userConfiguredElementTyposcript = array()) { GeneralUtility::deprecationLog('EXT:form: Do not use "layout." anymore. Deprecated since TYPO3 CMS 7, this function will be removed in TYPO3 CMS 8.'); if ($element->getElementType() === 'FORM') { $containerWrapReturn = $this->replaceTagWithMarker('elements', 'body', $this->getGlobalLayoutByElementType('CONTAINERWRAP')); if ($this->formBuilder->getControllerAction() === 'show') { $formWrapReturn = $this->replaceTagWithMarker('containerwrap', 'form', $this->getGlobalLayoutByElementType('FORM')); } elseif ($this->formBuilder->getControllerAction() === 'confirmation') { $formWrapReturn = $this->replaceTagWithMarker('containerwrap', 'body', $this->getGlobalLayoutByElementType('CONFIRMATION')); } else { $formWrapReturn = $this->replaceTagWithMarker('containerwrap', 'html', $this->getGlobalLayoutByElementType('HTML')); } $formLayout = str_replace($formWrapReturn['marker'], $containerWrapReturn['html'], $formWrapReturn['html']); $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)) { /* Get the element layout definition or fallback to the global definition (if set) */ if (isset($userConfiguredElementTyposcript['layout'])) { $elementLayout = $userConfiguredElementTyposcript['layout']; } else { $elementLayout = $this->getGlobalLayoutByElementType($element->getElementType()); } /* if a element layout exist */ $elementWrap = null; if ($elementLayout) { $elementWrap = $this->determineElementOuterWraps($element->getElementType(), $elementLayout); if ($elementWrap['html'] !== '') { /* layout.label */ if (!in_array($element->getElementType(), $this->elementsWithoutLabel, true)) { $descriptionElementLayouts = $this->getDescriptionElementLayouts($element); if (!$descriptionElementLayouts['labelContainContent']) { $descriptionElementLayouts['labelLayout'] = ''; } else { $libxmlUseInternalErrors = libxml_use_internal_errors(true); $dom = new \DOMDocument('1.0', 'utf-8'); $dom->formatOutput = true; $dom->preserveWhiteSpace = false; if ($dom->loadXML($descriptionElementLayouts['labelLayout'])) { $nodes = $dom->getElementsByTagName('label'); if ($nodes->length) { $node = $nodes->item(0); if ($node) { $node->setAttribute('for', $element->getId()); $descriptionElementLayouts['labelLayout'] = $dom->saveXML($dom->firstChild); } } } libxml_use_internal_errors($libxmlUseInternalErrors); } /* Replace <label />, <error /> and <mandatory /> in the element wrap html */ $labelReturn = $this->replaceTagWithMarker('label', 'body', $elementWrap['html']); if ($labelReturn['html'] !== '') { $elementWrap['html'] = str_replace($labelReturn['marker'], $descriptionElementLayouts['labelLayout'], $labelReturn['html']); } $errorReturn = $this->replaceTagWithMarker('error', 'body', $elementWrap['html']); if ($errorReturn['html'] !== '') { $elementWrap['html'] = str_replace($errorReturn['marker'], $descriptionElementLayouts['errorLayout'], $errorReturn['html']); } $mandatoryReturn = $this->replaceTagWithMarker('mandatory', 'body', $elementWrap['html']); if ($mandatoryReturn['html'] !== '') { $elementWrap['html'] = str_replace($mandatoryReturn['marker'], $descriptionElementLayouts['mandatoryLayout'], $mandatoryReturn['html']); } } $elementWrap = explode($elementWrap['marker'], $elementWrap['html']); } else { $elementWrap = null; } } /* Set element outer wraps and set the default classes */ $elementOuterWrap = null; if ($this->getGlobalLayoutByElementType('ELEMENTWRAP')) { $libxmlUseInternalErrors = libxml_use_internal_errors(true); $dom = new \DOMDocument('1.0', 'utf-8'); $dom->formatOutput = true; $dom->preserveWhiteSpace = false; if ($dom->loadXML($this->getGlobalLayoutByElementType('ELEMENTWRAP'))) { $node = $dom->firstChild; if ($node) { $class = ''; if ($node->getAttribute('class') !== '') { $class = $node->getAttribute('class') . ' '; } $class .= 'csc-form-' . $element->getElementCounter() . ' csc-form-element csc-form-element-' . $element->getElementTypeLowerCase(); $node->setAttribute('class', $class); $elementOuterWrap = $dom->saveXML($dom->firstChild); $return = $this->replaceTagWithMarker('element', 'body', $elementOuterWrap); if ($return['marker'] !== '') { $elementOuterWrap = explode($return['marker'], $return['html']); if ($element->getElementType() === 'SELECT') { $layout = $element->getLayout(); $layout['optionOuterWrap'] = $elementOuterWrap; $element->setLayout($layout); } } else { /* this should never be happen */ $elementOuterWrap = null; } } } else { $elementOuterWrap = null; } libxml_use_internal_errors($libxmlUseInternalErrors); } if ($elementWrap && !$elementOuterWrap) { /* If only $elementWrap isset */ $layout = $element->getLayout(); $layout['elementOuterWrap'] = $elementWrap; $element->setLayout($layout); } elseif (!$elementWrap && $elementOuterWrap) { /* If only $elementOuterWrap isset */ $layout = $element->getLayout(); $layout['elementOuterWrap'] = $elementOuterWrap; $element->setLayout($layout); } elseif ($elementWrap && $elementOuterWrap) { /* If $elementWrap isset and $elementOuterWrap isset */ $elementWrap = array($elementOuterWrap[0] . $elementWrap[0], $elementWrap[1] . $elementOuterWrap[1]); $layout = $element->getLayout(); $layout['elementOuterWrap'] = $elementWrap; $element->setLayout($layout); } /* Set container inner wraps */ if (in_array($element->getElementType(), $this->containerElements)) { $elementWrap = $this->determineElementOuterWraps($element->getElementType(), $elementLayout); /* Replace the legend value */ $descriptionElementLayouts = $this->getDescriptionElementLayouts($element, 'legend'); if (!$descriptionElementLayouts['labelContainContent']) { $descriptionElementLayouts['labelLayout'] = ''; } /* No fieldset tag exist. * Ignore CONTAINERWRAP * */ if ($elementWrap['html'] === '') { $containerWrapReturn = $this->replaceTagWithMarker('elements', 'body', $elementLayout); if ($containerWrapReturn['marker'] && $containerWrapReturn['html']) { /* Replace <legend /> in the element wrap html */ $legendReturn = $this->replaceTagWithMarker('legend', 'body', $containerWrapReturn['html']); if ($legendReturn['html'] !== '') { $containerWrapReturn['html'] = str_replace($legendReturn['marker'], $descriptionElementLayouts['labelLayout'], $legendReturn['html']); } $containerWrap = explode($containerWrapReturn['marker'], $containerWrapReturn['html']); } else { $containerWrap = array('', ''); } $layout = $element->getLayout(); $layout['containerInnerWrap'] = $containerWrap; $layout['noFieldsetTag'] = true; $layout['legend'] = $descriptionElementLayouts['labelLayout']; $element->setLayout($layout); } else { /* set the wraps */ $containerOuterWrap = array('', ''); $containerOuterWrap = explode($elementWrap['marker'], $elementWrap['html']); $containerWrapReturn = $this->replaceTagWithMarker('elements', 'body', $this->getGlobalLayoutByElementType('CONTAINERWRAP')); $containerInnerWrap = explode($containerWrapReturn['marker'], $containerWrapReturn['html']); $containerWrap = array($containerOuterWrap[0] . $containerInnerWrap[0], $containerInnerWrap[1] . $containerOuterWrap[1]); $layout = $element->getLayout(); $layout['containerInnerWrap'] = $containerWrap; $layout['legend'] = $descriptionElementLayouts['labelLayout']; $element->setLayout($layout); $classFromLayout = $this->getElementClassFromLayout('fieldset'); if (!empty($classFromLayout)) { if (!empty($element->getHtmlAttribute('class'))) { $classFromLayout .= ' ' . $element->getHtmlAttribute('class'); } $element->setHtmlAttribute('class', $classFromLayout); } } } else { /* set class attribute for the element tag */ if ($this->formBuilder->getControllerAction() === 'show') { if ($elementType === 'TEXTAREA') { $tagName = 'textarea'; } elseif ($elementType === 'SELECT') { $tagName = 'select'; } else { $tagName = 'input'; } $classFromLayout = $this->getElementClassFromLayout($element->getElementType(), $tagName); if (!empty($classFromLayout)) { if (!empty($element->getAdditionalArgument('class'))) { $classFromLayout .= ' ' . $element->getAdditionalArgument('class'); } $element->setAdditionalArgument('class', $classFromLayout); } } } } }