2 namespace TYPO3\CMS\Backend\Form\Container;
45 $flexFormFieldsArray = $this->data[
'flexFormDataStructureArray'];
46 $flexFormRowData = $this->data[
'flexFormRowData'];
47 $flexFormFieldIdentifierPrefix = $this->data[
'flexFormFieldIdentifierPrefix'];
48 $flexFormSectionType = $this->data[
'flexFormSectionType'];
49 $flexFormSectionTitle = $this->data[
'flexFormSectionTitle'];
58 $flexFormFieldIdentifierPrefix = $flexFormFieldIdentifierPrefix .
'-' . GeneralUtility::shortMd5(uniqid(
'id',
true));
61 foreach ($flexFormRowData as $flexFormContainerCounter => $existingSectionContainerData) {
63 if (is_array($existingSectionContainerData)) {
64 $existingSectionContainerDataStructureType = key($existingSectionContainerData);
65 $existingSectionContainerData = $existingSectionContainerData[$existingSectionContainerDataStructureType];
66 $containerDataStructure = $flexFormFieldsArray[$existingSectionContainerDataStructureType];
68 if (is_array($containerDataStructure)) {
70 if (!empty(trim($containerDataStructure[
'title']))) {
71 $sectionTitle = $languageService->sL(trim($containerDataStructure[
'title']));
75 $options[
'flexFormRowData'] = $existingSectionContainerData[
'el'];
76 $options[
'flexFormDataStructureArray'] = $containerDataStructure[
'el'];
77 $options[
'flexFormFieldIdentifierPrefix'] = $flexFormFieldIdentifierPrefix;
78 $options[
'flexFormFormPrefix'] = $this->data[
'flexFormFormPrefix'] .
'[' . $flexFormSectionType .
']' .
'[el]';
79 $options[
'flexFormContainerName'] = $existingSectionContainerDataStructureType;
80 $options[
'flexFormContainerCounter'] = $flexFormContainerCounter;
81 $options[
'flexFormContainerTitle'] = $sectionTitle;
82 $options[
'flexFormContainerElementCollapsed'] = (bool)$existingSectionContainerData[
'el'][
'_TOGGLE'];
83 $options[
'renderType'] =
'flexFormContainerContainer';
84 $flexFormContainerContainerResult = $this->nodeFactory->create($options)->render();
93 $containerTemplatesHtml = array();
94 foreach ($flexFormFieldsArray as $flexFormContainerName => $flexFormFieldDefinition) {
95 $containerTemplateHtml = array();
97 if (!empty(trim($flexFormFieldDefinition[
'title']))) {
98 $sectionTitle = $languageService->sL(trim($flexFormFieldDefinition[
'title']));
103 $options[
'flexFormRowData'] = array();
104 $options[
'flexFormDataStructureArray'] = $flexFormFieldDefinition[
'el'];
105 $options[
'flexFormFieldIdentifierPrefix'] = $flexFormFieldIdentifierPrefix;
106 $options[
'flexFormFormPrefix'] = $this->data[
'flexFormFormPrefix'] .
'[' . $flexFormSectionType .
']' .
'[el]';
107 $options[
'flexFormContainerName'] = $flexFormContainerName;
108 $options[
'flexFormContainerCounter'] = $flexFormFieldIdentifierPrefix .
'-form';
109 $options[
'flexFormContainerTitle'] = $sectionTitle;
110 $options[
'flexFormContainerElementCollapsed'] =
false;
111 $options[
'renderType'] =
'flexFormContainerContainer';
112 $flexFormContainerContainerTemplateResult = $this->nodeFactory->create($options)->render();
116 $treeElementIdentifier =
'';
117 if (!empty($flexFormContainerContainerTemplateResult[
'extJSCODE'])) {
118 if (preg_match(
'/StandardTreeItemData\["([a-f0-9]{32})"\]/', $flexFormContainerContainerTemplateResult[
'extJSCODE'], $matches)) {
119 $treeElementIdentifier = $matches[1];
124 $identifierPrefixJs =
'replace(/' . $flexFormFieldIdentifierPrefix .
'-/g,"' . $flexFormFieldIdentifierPrefix .
'-"+' . $uniqueId .
'+"-")';
125 $identifierPrefixJs .=
'.replace(/(tceforms-(datetime|date)field-)/g,"$1" + (new Date()).getTime())';
127 if (!empty($treeElementIdentifier)) {
128 $identifierPrefixJs .=
'.replace(/(tree_?)?' . $treeElementIdentifier .
'/g,"$1" + (' . $uniqueId .
'))';
131 $onClickInsert = array();
132 $onClickInsert[] =
'var ' . $uniqueId .
' = "' .
'idx"+(new Date()).getTime();';
133 $onClickInsert[] =
'TYPO3.jQuery("#' . $flexFormFieldIdentifierPrefix .
'").append(TYPO3.jQuery(' . json_encode($flexFormContainerContainerTemplateResult[
'html']) .
'.' . $identifierPrefixJs .
'));';
134 $onClickInsert[] =
'TYPO3.jQuery("#' . $flexFormFieldIdentifierPrefix .
'").t3FormEngineFlexFormElement();';
135 $onClickInsert[] =
'eval(unescape("' . rawurlencode(implode(
';', $flexFormContainerContainerTemplateResult[
'additionalJavaScriptPost'])) .
'").' . $identifierPrefixJs .
');';
136 if (!empty($treeElementIdentifier)) {
137 $onClickInsert[] =
'eval(unescape("' . rawurlencode($flexFormContainerContainerTemplateResult[
'extJSCODE']) .
'").' . $identifierPrefixJs .
');';
139 $onClickInsert[] =
'TBE_EDITOR.addActionChecks("submit", unescape("' . rawurlencode(implode(
';', $flexFormContainerContainerTemplateResult[
'additionalJavaScriptSubmit'])) .
'").' . $identifierPrefixJs .
');';
140 $onClickInsert[] =
'TYPO3.FormEngine.reinitialize();';
141 $onClickInsert[] =
'TYPO3.FormEngine.Validation.initializeInputFields();';
142 $onClickInsert[] =
'TYPO3.FormEngine.Validation.validate();';
143 $onClickInsert[] =
'return false;';
145 $containerTemplateHtml[] =
'<a href="#" class="btn btn-default" onclick="' . htmlspecialchars(implode(LF, $onClickInsert)) .
'">';
146 $containerTemplateHtml[] = $iconFactory->getIcon(
'actions-document-new',
Icon::SIZE_SMALL)->render();
148 $containerTemplateHtml[] =
'</a>';
149 $containerTemplatesHtml[] = implode(LF, $containerTemplateHtml);
151 $flexFormContainerContainerTemplateResult[
'html'] =
'';
152 $flexFormContainerContainerTemplateResult[
'additionalJavaScriptPost'] = array();
153 $flexFormContainerContainerTemplateResult[
'additionalJavaScriptSubmit'] = array();
159 $createElementsHtml = array();
160 if ($userHasAccessToDefaultLanguage) {
161 $createElementsHtml[] =
'<div class="t3-form-field-add-flexsection">';
162 $createElementsHtml[] =
'<div class="btn-group">';
163 $createElementsHtml[] = implode(
'|', $containerTemplatesHtml);
164 $createElementsHtml[] =
'</div>';
165 $createElementsHtml[] =
'</div>';
169 $toggleAll = $languageService->sL(
'LLL:EXT:lang/locallang_core.xlf:labels.toggleall',
true);
171 $html[] =
'<div class="panel panel-tab">';
172 $html[] =
'<div class="panel-body">';
173 $html[] =
'<div class="t3-form-field-container t3-form-flex">';
174 $html[] =
'<div class="t3-form-field-label-flexsection">';
176 $html[] = htmlspecialchars($flexFormSectionTitle);
179 $html[] =
'<div class="t3js-form-field-toggle-flexsection t3-form-flexsection-toggle">';
180 $html[] =
'<a class="btn btn-default" href="#" title="' . $toggleAll .
'">';
181 $html[] = $iconFactory->getIcon(
'actions-move-right',
Icon::SIZE_SMALL)->render() . $toggleAll;
185 $html[] =
'id="' . $flexFormFieldIdentifierPrefix .
'"';
186 $html[] =
'class="panel-group panel-hover t3-form-field-container-flexsection t3-flex-container"';
187 $html[] =
'data-t3-flex-allow-restructure="' . ($userHasAccessToDefaultLanguage ?
'1' :
'0') .
'"';
189 $html[] = $resultArray[
'html'];
191 $html[] = implode(LF, $createElementsHtml);
196 $resultArray[
'html'] = implode(LF, $html);