2 declare(strict_types = 1);
18 use Psr\Http\Message\ResponseInterface;
19 use Psr\Http\Message\ServerRequestInterface;
40 public function containerAdd(ServerRequestInterface $request): ResponseInterface
42 $queryParameters = $request->getParsedBody();
44 $vanillaUid = (int)$queryParameters[
'vanillaUid'];
45 $databaseRowUid = $queryParameters[
'databaseRowUid'];
46 $command = $queryParameters[
'command'];
47 $tableName = $queryParameters[
'tableName'];
48 $fieldName = $queryParameters[
'fieldName'];
49 $recordTypeValue = $queryParameters[
'recordTypeValue'];
50 $dataStructureIdentifier = json_encode($queryParameters[
'dataStructureIdentifier']);
51 $flexFormSheetName = $queryParameters[
'flexFormSheetName'];
52 $flexFormFieldName = $queryParameters[
'flexFormFieldName'];
53 $flexFormContainerName = $queryParameters[
'flexFormContainerName'];
56 $processedTca =
$GLOBALS[
'TCA'][$tableName];
57 $flexFormTools = GeneralUtility::makeInstance(FlexFormTools::class);
58 $dataStructure = $flexFormTools->parseDataStructureByIdentifier($dataStructureIdentifier);
59 $processedTca[
'columns'][$fieldName][
'config'][
'ds'] = $dataStructure;
60 $processedTca[
'columns'][$fieldName][
'config'][
'dataStructureIdentifier'] = $dataStructureIdentifier;
63 $flexSectionContainerPreparation = [
64 'flexFormSheetName' => $flexFormSheetName,
65 'flexFormFieldName' => $flexFormFieldName,
66 'flexFormContainerName' => $flexFormContainerName,
67 'flexFormContainerIdentifier' => $flexFormContainerIdentifier,
70 $formDataGroup = GeneralUtility::makeInstance(TcaDatabaseRecord::class);
71 $formDataCompiler = GeneralUtility::makeInstance(FormDataCompiler::class, $formDataGroup);
72 $formDataCompilerInput = [
73 'tableName' => $tableName,
74 'vanillaUid' => (int)$vanillaUid,
75 'command' => $command,
76 'recordTypeValue' => $recordTypeValue,
77 'processedTca' => $processedTca,
78 'flexSectionContainerPreparation' => $flexSectionContainerPreparation,
84 if ($command ===
'new') {
85 $formDataCompilerInput[
'databaseRow'][
'uid'] = $databaseRowUid;
87 $formData = $formDataCompiler->compile($formDataCompilerInput);
89 $dataStructure = $formData[
'processedTca'][
'columns'][$fieldName][
'config'][
'ds'];
90 $formData[
'fieldName'] = $fieldName;
91 $formData[
'flexFormDataStructureArray'] = $dataStructure[
'sheets'][$flexFormSheetName][
'ROOT'][
'el'][$flexFormFieldName][
'children'][$flexFormContainerIdentifier];
92 $formData[
'flexFormDataStructureIdentifier'] = $dataStructureIdentifier;
93 $formData[
'flexFormFieldName'] = $flexFormFieldName;
94 $formData[
'flexFormSheetName'] = $flexFormSheetName;
95 $formData[
'flexFormContainerName'] = $flexFormContainerName;
96 $formData[
'flexFormContainerIdentifier'] = $flexFormContainerIdentifier;
97 $formData[
'flexFormContainerElementCollapsed'] =
false;
99 $formData[
'flexFormFormPrefix'] =
'[data][' . $flexFormSheetName .
'][lDEF]' .
'[' . $flexFormFieldName .
']' .
'[el]';
104 if (isset($formData[
'databaseRow'][$fieldName]
105 [
'data'][$flexFormSheetName]
106 [
'lDEF'][$flexFormFieldName]
107 [
'el'][$flexFormContainerIdentifier][$flexFormContainerName][
'el']
110 $formData[
'databaseRow'][$fieldName]
111 [
'data'][$flexFormSheetName]
112 [
'lDEF'][$flexFormFieldName]
113 [
'el'][$flexFormContainerIdentifier][$flexFormContainerName][
'el']
116 $formData[
'flexFormRowData'] = $formData[
'databaseRow'][$fieldName]
117 [
'data'][$flexFormSheetName]
118 [
'lDEF'][$flexFormFieldName]
119 [
'el'][$flexFormContainerIdentifier][$flexFormContainerName][
'el'];
122 $formData[
'parameterArray'][
'itemFormElName'] =
'data[' . $tableName .
'][' . $formData[
'databaseRow'][
'uid'] .
'][' . $fieldName .
']';
126 $formData[
'parameterArray'][
'fieldChangeFunc'] = [];
127 $formData[
'parameterArray'][
'fieldChangeFunc'][
'TBE_EDITOR_fieldChanged'] =
'TBE_EDITOR.fieldChanged('
128 . GeneralUtility::quoteJSvalue($tableName)
129 .
',' . GeneralUtility::quoteJSvalue($formData[
'databaseRow'][
'uid'])
130 .
',' . GeneralUtility::quoteJSvalue($fieldName)
131 .
',' . GeneralUtility::quoteJSvalue($formData[
'parameterArray'][
'itemFormElName'])
137 $nodeFactory = GeneralUtility::makeInstance(NodeFactory::class);
138 $formData[
'renderType'] =
'flexFormContainerContainer';
139 $newContainerResult = $nodeFactory->create($formData)->render();
142 'html' => $newContainerResult[
'html'],
143 'stylesheetFiles' => [],
147 if (!empty($newContainerResult[
'additionalJavaScriptSubmit'])) {
148 $additionalJavaScriptSubmit = implode(
'', $newContainerResult[
'additionalJavaScriptSubmit']);
149 $additionalJavaScriptSubmit = str_replace([CR, LF],
'', $additionalJavaScriptSubmit);
150 $jsonResult[
'scriptCall'][] =
'TBE_EDITOR.addActionChecks("submit", "' . addslashes($additionalJavaScriptSubmit) .
'");';
152 foreach ($newContainerResult[
'additionalJavaScriptPost'] as $singleAdditionalJavaScriptPost) {
153 $jsonResult[
'scriptCall'][] = $singleAdditionalJavaScriptPost;
155 foreach ($newContainerResult[
'stylesheetFiles'] as $stylesheetFile) {
158 if (!empty($newContainerResult[
'additionalInlineLanguageLabelFiles'])) {
160 foreach ($newContainerResult[
'additionalInlineLanguageLabelFiles'] as $additionalInlineLanguageLabelFile) {
166 $javaScriptCode = [];
167 $javaScriptCode[] =
'if (typeof TYPO3 === \'undefined\' || typeof TYPO3.lang === \'undefined\') {';
168 $javaScriptCode[] =
' TYPO3.lang = {}';
169 $javaScriptCode[] =
'}';
170 $javaScriptCode[] =
'var additionalInlineLanguageLabels = ' . json_encode($labels) .
';';
171 $javaScriptCode[] =
'for (var attributeName in additionalInlineLanguageLabels) {';
172 $javaScriptCode[] =
' if (typeof TYPO3.lang[attributeName] === \'undefined\') {';
173 $javaScriptCode[] =
' TYPO3.lang[attributeName] = additionalInlineLanguageLabels[attributeName]';
174 $javaScriptCode[] =
' }';
175 $javaScriptCode[] =
'}';
177 $jsonResult[
'scriptCall'][] = implode(LF, $javaScriptCode);
181 $jsonResult[
'scriptCall'] = array_merge($requireJsModule, $jsonResult[
'scriptCall']);