17 use Psr\Http\Message\ResponseInterface;
18 use Psr\Http\Message\ServerRequestInterface;
39 $tableName = $request->getQueryParams()[
'tableName'] ??
'';
40 $fieldName = $request->getQueryParams()[
'fieldName'] ??
'';
45 throw new \RuntimeException(
46 'TCA for table ' . $tableName .
' not found',
50 $processedTca =
$GLOBALS[
'TCA'][$tableName];
51 if (!isset($processedTca[
'columns'][$fieldName]) || !is_array($processedTca[
'columns'][$fieldName])) {
52 throw new \RuntimeException(
53 'TCA for table ' . $tableName .
' and field ' . $fieldName .
' not found',
59 $recordTypeValue = $request->getQueryParams()[
'recordTypeValue'];
60 $processedTca[
'types'][$recordTypeValue][
'showitem'] = $fieldName;
62 $processedTca[
'columns'] = [
63 $fieldName => $processedTca[
'columns'][$fieldName],
66 $dataStructureIdentifier =
'';
67 $flexFormSheetName =
'';
68 $flexFormFieldName =
'';
69 $flexFormContainerIdentifier =
'';
70 $flexFormContainerFieldName =
'';
71 $flexSectionContainerPreparation = [];
72 if ($processedTca[
'columns'][$fieldName][
'config'][
'type'] ===
'flex') {
73 if (!empty($request->getQueryParams()[
'dataStructureIdentifier'])) {
74 $dataStructureIdentifier = json_encode($request->getQueryParams()[
'dataStructureIdentifier']);
76 $flexFormSheetName = $request->getQueryParams()[
'flexFormSheetName'];
77 $flexFormFieldName = $request->getQueryParams()[
'flexFormFieldName'];
78 $flexFormContainerName = $request->getQueryParams()[
'flexFormContainerName'];
79 $flexFormContainerIdentifier = $request->getQueryParams()[
'flexFormContainerIdentifier'];
80 $flexFormContainerFieldName = $request->getQueryParams()[
'flexFormContainerFieldName'];
81 $flexFormSectionContainerIsNew = (bool)$request->getQueryParams()[
'flexFormSectionContainerIsNew'];
83 $flexFormTools = GeneralUtility::makeInstance(FlexFormTools::class);
84 $dataStructure = $flexFormTools->parseDataStructureByIdentifier($dataStructureIdentifier);
87 if (empty($flexFormContainerFieldName)) {
88 if (isset($dataStructure[
'sheets'][$flexFormSheetName][
'ROOT']
89 [
'el'][$flexFormFieldName])
93 $flexFormSheetName => [
97 $flexFormFieldName => $dataStructure[
'sheets'][$flexFormSheetName][
'ROOT']
98 [
'el'][$flexFormFieldName],
106 if (isset($dataStructure[
'sheets'][$flexFormSheetName][
'ROOT']
107 [
'el'][$flexFormFieldName]
108 [
'el'][$flexFormContainerName]
109 [
'el'][$flexFormContainerFieldName])
114 if ($flexFormSectionContainerIsNew) {
115 $flexSectionContainerPreparation = [
116 'flexFormSheetName' => $flexFormSheetName,
117 'flexFormFieldName' => $flexFormFieldName,
118 'flexFormContainerName' => $flexFormContainerName,
119 'flexFormContainerIdentifier' => $flexFormContainerIdentifier,
125 $flexFormSheetName => [
129 $flexFormFieldName => [
133 $flexFormContainerName => [
135 $flexFormContainerFieldName => $dataStructure[
'sheets'][$flexFormSheetName][
'ROOT']
136 [
'el'][$flexFormFieldName]
137 [
'el'][$flexFormContainerName]
138 [
'el'][$flexFormContainerFieldName]
150 $processedTca[
'columns'][$fieldName][
'config'][
'ds'] = $dataStructure;
151 $processedTca[
'columns'][$fieldName][
'config'][
'dataStructureIdentifier'] = $dataStructureIdentifier;
154 $formDataGroup = GeneralUtility::makeInstance(TcaSelectTreeAjaxFieldData::class);
155 $formDataCompiler = GeneralUtility::makeInstance(FormDataCompiler::class, $formDataGroup);
156 $formDataCompilerInput = [
157 'tableName' => $tableName,
158 'vanillaUid' => (int)$request->getQueryParams()[
'uid'],
159 'command' => $request->getQueryParams()[
'command'],
160 'processedTca' => $processedTca,
161 'recordTypeValue' => $recordTypeValue,
162 'selectTreeCompileItems' =>
true,
163 'flexSectionContainerPreparation' => $flexSectionContainerPreparation,
165 $formData = $formDataCompiler->compile($formDataCompilerInput);
167 if ($formData[
'processedTca'][
'columns'][$fieldName][
'config'][
'type'] ===
'flex') {
168 if (empty($flexFormContainerFieldName)) {
169 $treeData = $formData[
'processedTca'][
'columns'][$fieldName][
'config'][
'ds']
170 [
'sheets'][$flexFormSheetName][
'ROOT']
171 [
'el'][$flexFormFieldName][
'config'][
'items'];
173 $treeData = $formData[
'processedTca'][
'columns'][$fieldName][
'config'][
'ds']
174 [
'sheets'][$flexFormSheetName][
'ROOT']
175 [
'el'][$flexFormFieldName]
176 [
'children'][$flexFormContainerIdentifier]
177 [
'el'][$flexFormContainerFieldName][
'config'][
'items'];
180 $treeData = $formData[
'processedTca'][
'columns'][$fieldName][
'config'][
'items'];