[BUGFIX] Have proper dom in TCA select tree 31/56931/5
authorChristian Kuhn <lolli@schwarzbu.ch>
Sat, 12 May 2018 09:47:27 +0000 (11:47 +0200)
committerChristian Kuhn <lolli@schwarzbu.ch>
Sat, 12 May 2018 11:27:25 +0000 (13:27 +0200)
Patch for issue #84564 violates the DOM all other elements
stick to  and just adds the field wizard outside the element div.
Additionally, merging other field wizards result like
requireJS and the readOnly handling is fixed.

Resolves: #84976
Releases: master
Change-Id: I0d329e85649424686ab8653a72388d75e0fc91cc
Reviewed-on: https://review.typo3.org/56931
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Markus Klein <markus.klein@typo3.org>
Tested-by: Markus Klein <markus.klein@typo3.org>
Reviewed-by: Mathias Schreiber <mathias.schreiber@typo3.com>
Tested-by: Mathias Schreiber <mathias.schreiber@typo3.com>
Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch>
Tested-by: Christian Kuhn <lolli@schwarzbu.ch>
typo3/sysext/backend/Classes/Form/Element/SelectTreeElement.php

index 903af7d..4b1020c 100644 (file)
@@ -118,46 +118,55 @@ class SelectTreeElement extends AbstractFormElement
         $fieldInformationHtml = $fieldInformationResult['html'];
         $resultArray = $this->mergeChildReturnIntoExistingResult($resultArray, $fieldInformationResult, false);
 
+        $fieldWizardResult = $this->renderFieldWizard();
+        $fieldWizardHtml = $fieldWizardResult['html'];
+        $resultArray = $this->mergeChildReturnIntoExistingResult($resultArray, $fieldWizardResult, false);
+
         $html = [];
         $html[] = '<div class="formengine-field-item t3js-formengine-field-item">';
-        if (!$readOnly) {
+        if ($readOnly === 'false') {
             $html[] = $fieldInformationHtml;
         }
         $html[] =   '<div class="form-control-wrap">';
-        $html[] =       '<div class="typo3-tceforms-tree">';
-        $html[] =           '<input class="treeRecord" type="hidden"';
-        $html[] =               ' data-formengine-validation-rules="' . htmlspecialchars($this->getValidationDataAsJsonString($config)) . '"';
-        $html[] =               ' data-relatedfieldname="' . htmlspecialchars($parameterArray['itemFormElName']) . '"';
-        $html[] =               ' data-tablename="' . htmlspecialchars($this->data['tableName']) . '"';
-        $html[] =               ' data-fieldname="' . htmlspecialchars($this->data['fieldName']) . '"';
-        $html[] =               ' data-uid="' . (int)$this->data['vanillaUid'] . '"';
-        $html[] =               ' data-recordtypevalue="' . htmlspecialchars($this->data['recordTypeValue']) . '"';
-        $html[] =               ' data-datastructureidentifier="' . htmlspecialchars($dataStructureIdentifier) . '"';
-        $html[] =               ' data-flexformsheetname="' . htmlspecialchars($flexFormSheetName) . '"';
-        $html[] =               ' data-flexformfieldname="' . htmlspecialchars($flexFormFieldName) . '"';
-        $html[] =               ' data-flexformcontainername="' . htmlspecialchars($flexFormContainerName) . '"';
-        $html[] =               ' data-flexformcontaineridentifier="' . htmlspecialchars($flexFormContainerIdentifier) . '"';
-        $html[] =               ' data-flexformcontainerfieldname="' . htmlspecialchars($flexFormContainerFieldName) . '"';
-        $html[] =               ' data-flexformsectioncontainerisnew="' . htmlspecialchars($flexFormSectionContainerIsNew) . '"';
-        $html[] =               ' data-command="' . htmlspecialchars($this->data['command']) . '"';
-        $html[] =               ' data-read-only="' . $readOnly . '"';
-        $html[] =               ' data-tree-exclusive-keys="' . htmlspecialchars($exclusiveKeys) . '"';
-        $html[] =               ' data-tree-expand-up-to-level="' . ($expanded ? '999' : '1') . '"';
-        $html[] =               ' data-tree-show-toolbar="' . $showHeader . '"';
-        $html[] =               ' name="' . htmlspecialchars($parameterArray['itemFormElName']) . '"';
-        $html[] =               ' id="treeinput' . $formElementId . '"';
-        $html[] =               ' value=""';
-        $html[] =           '/>';
+        $html[] =       '<div class="form-wizards-wrap">';
+        $html[] =           '<div class="form-wizards-element">';
+        $html[] =               '<div class="typo3-tceforms-tree">';
+        $html[] =                   '<input class="treeRecord" type="hidden"';
+        $html[] =                       ' data-formengine-validation-rules="' . htmlspecialchars($this->getValidationDataAsJsonString($config)) . '"';
+        $html[] =                       ' data-relatedfieldname="' . htmlspecialchars($parameterArray['itemFormElName']) . '"';
+        $html[] =                       ' data-tablename="' . htmlspecialchars($this->data['tableName']) . '"';
+        $html[] =                       ' data-fieldname="' . htmlspecialchars($this->data['fieldName']) . '"';
+        $html[] =                       ' data-uid="' . (int)$this->data['vanillaUid'] . '"';
+        $html[] =                       ' data-recordtypevalue="' . htmlspecialchars($this->data['recordTypeValue']) . '"';
+        $html[] =                       ' data-datastructureidentifier="' . htmlspecialchars($dataStructureIdentifier) . '"';
+        $html[] =                       ' data-flexformsheetname="' . htmlspecialchars($flexFormSheetName) . '"';
+        $html[] =                       ' data-flexformfieldname="' . htmlspecialchars($flexFormFieldName) . '"';
+        $html[] =                       ' data-flexformcontainername="' . htmlspecialchars($flexFormContainerName) . '"';
+        $html[] =                       ' data-flexformcontaineridentifier="' . htmlspecialchars($flexFormContainerIdentifier) . '"';
+        $html[] =                       ' data-flexformcontainerfieldname="' . htmlspecialchars($flexFormContainerFieldName) . '"';
+        $html[] =                       ' data-flexformsectioncontainerisnew="' . htmlspecialchars($flexFormSectionContainerIsNew) . '"';
+        $html[] =                       ' data-command="' . htmlspecialchars($this->data['command']) . '"';
+        $html[] =                       ' data-read-only="' . $readOnly . '"';
+        $html[] =                       ' data-tree-exclusive-keys="' . htmlspecialchars($exclusiveKeys) . '"';
+        $html[] =                       ' data-tree-expand-up-to-level="' . ($expanded ? '999' : '1') . '"';
+        $html[] =                       ' data-tree-show-toolbar="' . $showHeader . '"';
+        $html[] =                       ' name="' . htmlspecialchars($parameterArray['itemFormElName']) . '"';
+        $html[] =                       ' id="treeinput' . $formElementId . '"';
+        $html[] =                       ' value=""';
+        $html[] =                   '/>';
+        $html[] =               '</div>';
+        $html[] =               '<div id="' . $treeWrapperId . '" class="svg-tree-wrapper" style="height: ' . $heightInPx . 'px;"></div>';
+        $html[] =               '<script type="text/javascript">var ' . $treeWrapperId . ' = ' . $this->getTreeOnChangeJs() . '</script>';
+        $html[] =           '</div>';
+        if ($readOnly === 'false') {
+            $html[] =       '<div class="form-wizards-items-bottom">';
+            $html[] =           $fieldWizardHtml;
+            $html[] =       '</div>';
+        }
         $html[] =       '</div>';
-        $html[] =       '<div id="' . $treeWrapperId . '" class="svg-tree-wrapper" style="height: ' . $heightInPx . 'px;"></div>';
-        $html[] =       '<script type="text/javascript">var ' . $treeWrapperId . ' = ' . $this->getTreeOnChangeJs() . '</script>';
         $html[] =   '</div>';
         $html[] = '</div>';
 
-        $fieldWizardResult = $this->renderFieldWizard();
-        $fieldWizardHtml = $fieldWizardResult['html'];
-        $html[] = $fieldWizardHtml;
-
         $resultArray['html'] = implode(LF, $html);
 
         // add necessary labels for tree header