/** * 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)) { $labelLayout = $this->getGlobalLayoutByElementType('LABEL'); $mandatoryLayout = ''; $errorLayout = ''; if ($this->formBuilder->getControllerAction() === 'show') { /* layout.mandatory */ $mandatoryMessages = $this->formBuilder->getValidationBuilder()->getMandatoryValidationMessagesByElementName($element->getName()); if (!empty($mandatoryMessages)) { $mandatoryLayout = $this->replaceLabelContent('mandatory', $mandatoryMessages); } /* layout.error */ $errorMessages = $element->getValidationErrorMessages(); if (!empty($errorMessages)) { $errorLayout = $this->replaceLabelContent('error', $errorMessages); } } /* Replace the mandatory and error messages */ $mandatoryReturn = $this->replaceTagWithMarker('mandatory', 'body', $labelLayout); $labelContainContent = false; if ($mandatoryReturn['html'] !== '') { if (!empty($mandatoryLayout)) { $labelContainContent = true; } $labelLayout = str_replace($mandatoryReturn['marker'], $mandatoryLayout, $mandatoryReturn['html']); } $errorReturn = $this->replaceTagWithMarker('error', 'body', $labelLayout); if ($errorReturn['html'] !== '') { if (!empty($errorLayout)) { $labelContainContent = true; } $labelLayout = str_replace($errorReturn['marker'], $errorLayout, $errorReturn['html']); } /* Replace the label value */ $labelValueReturn = $this->replaceTagWithMarker('labelvalue', 'body', $labelLayout); if ($labelValueReturn['html'] !== '') { if (!empty($element->getAdditionalArgument('label'))) { $labelContainContent = true; } $labelLayout = str_replace($labelValueReturn['marker'], $element->getAdditionalArgument('label'), $labelValueReturn['html']); } if (!$labelContainContent) { $labelLayout = ''; } else { $libxmlUseInternalErrors = libxml_use_internal_errors(true); $dom = new \DOMDocument('1.0', 'utf-8'); $dom->formatOutput = true; $dom->preserveWhiteSpace = false; if ($dom->loadXML($labelLayout)) { $nodes = $dom->getElementsByTagName('label'); if ($nodes->length) { $node = $nodes->item(0); if ($node) { $node->setAttribute('for', $element->getId()); $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'], $labelLayout, $labelReturn['html']); } $errorReturn = $this->replaceTagWithMarker('error', 'body', $elementWrap['html']); if ($errorReturn['html'] !== '') { $elementWrap['html'] = str_replace($errorReturn['marker'], $errorLayout, $errorReturn['html']); } $mandatoryReturn = $this->replaceTagWithMarker('mandatory', 'body', $elementWrap['html']); if ($mandatoryReturn['html'] !== '') { $elementWrap['html'] = str_replace($mandatoryReturn['marker'], $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 */ $legendLayout = $this->getGlobalLayoutByElementType('LEGEND'); $legendValueReturn = $this->replaceTagWithMarker('legendvalue', 'body', $legendLayout); $legendContainContent = false; if ($legendValueReturn['html'] !== '') { if (!empty($element->getAdditionalArgument('legend'))) { $legendContainContent = true; } $legendLayout = str_replace($legendValueReturn['marker'], $element->getAdditionalArgument('legend'), $legendValueReturn['html']); } /* remove <mandatory /> and <error /> from legend */ $mandatoryReturn = $this->replaceTagWithMarker('mandatory', 'body', $legendLayout); if (!empty($mandatoryReturn['html'])) { $legendLayout = str_replace($mandatoryReturn['marker'], '', $mandatoryReturn['html']); } $errorReturn = $this->replaceTagWithMarker('error', 'body', $legendLayout); if (!empty($errorReturn['html'])) { $legendLayout = str_replace($errorReturn['marker'], '', $errorReturn['html']); } if (!$legendContainContent) { $legendLayout = ''; } /* No fieldset tag exist. * Ignore CONTAINERWRAP * */ if ($elementWrap['html'] === '') { $containerWrapReturn = $this->replaceTagWithMarker('elements', 'body', $elementLayout); $legendReturn = $this->replaceTagWithMarker('legend', 'body', $containerWrapReturn['html']); if ($legendReturn['html'] !== '') { $containerWrapReturn['html'] = str_replace($legendReturn['marker'], $legendLayout, $legendReturn['html']); } if ($containerWrapReturn['marker'] && $containerWrapReturn['html']) { $containerWrap = explode($containerWrapReturn['marker'], $containerWrapReturn['html']); } else { $containerWrap = array('', ''); } $layout = $element->getLayout(); $layout['containerInnerWrap'] = $containerWrap; $layout['noFieldsetTag'] = true; $element->setLayout($layout); } else { $legendReturn = $this->replaceTagWithMarker('legend', 'body', $elementWrap['html']); if ($legendReturn['html'] !== '') { $elementWrap['html'] = str_replace($legendReturn['marker'], $legendLayout, $legendReturn['html']); } /* 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; $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); } } } } }