2 declare(strict_types = 1);
50 const L10N_PREFIX =
'LLL:EXT:form/Resources/Private/Language/Database.xlf:';
71 if ($tableName ===
'tt_content' && $fieldName ===
'pi_flexform' && $row[
'CType'] ===
'form_formframework') {
72 $currentFlexData = [];
73 if (!empty($row[
'pi_flexform']) && !\is_array($row[
'pi_flexform'])) {
74 $currentFlexData = GeneralUtility::xml2array($row[
'pi_flexform']);
78 $identifier[
'ext-form-persistenceIdentifier'] =
'';
79 if (!empty($currentFlexData[
'data'][
'sDEF'][
'lDEF'][
'settings.persistenceIdentifier'][
'vDEF'])) {
80 $identifier[
'ext-form-persistenceIdentifier'] = $currentFlexData[
'data'][
'sDEF'][
'lDEF'][
'settings.persistenceIdentifier'][
'vDEF'];
84 $identifier[
'ext-form-overrideFinishers'] =
false;
86 isset($currentFlexData[
'data'][
'sDEF'][
'lDEF'][
'settings.overrideFinishers'][
'vDEF'])
87 && (
int)$currentFlexData[
'data'][
'sDEF'][
'lDEF'][
'settings.overrideFinishers'][
'vDEF'] === 1
89 $identifier[
'ext-form-overrideFinishers'] =
true;
107 if (isset($identifier[
'ext-form-persistenceIdentifier'])) {
110 $formPersistenceManager = GeneralUtility::makeInstance(ObjectManager::class)->get(FormPersistenceManagerInterface::class);
111 $formIsAccessible =
false;
112 foreach ($formPersistenceManager->listForms() as $form) {
113 $invalidFormDefinition = $form[
'invalid'] ??
false;
114 $hasDeprecatedFileExtension = $form[
'deprecatedFileExtension'] ??
false;
116 if ($form[
'location'] ===
'storage' && $hasDeprecatedFileExtension) {
120 if ($form[
'persistenceIdentifier'] === $identifier[
'ext-form-persistenceIdentifier']) {
121 $formIsAccessible =
true;
124 if ($invalidFormDefinition || $hasDeprecatedFileExtension) {
125 $dataStructure[
'sheets'][
'sDEF'][
'ROOT'][
'el'][
'settings.persistenceIdentifier'][
'TCEforms'][
'config'][
'items'][] = [
126 $form[
'name'] .
' (' . $form[
'persistenceIdentifier'] .
')',
127 $form[
'persistenceIdentifier'],
131 $dataStructure[
'sheets'][
'sDEF'][
'ROOT'][
'el'][
'settings.persistenceIdentifier'][
'TCEforms'][
'config'][
'items'][] = [
132 $form[
'name'] .
' (' . $form[
'persistenceIdentifier'] .
')',
133 $form[
'persistenceIdentifier'],
139 if (!empty($identifier[
'ext-form-persistenceIdentifier']) && !$formIsAccessible) {
140 $dataStructure[
'sheets'][
'sDEF'][
'ROOT'][
'el'][
'settings.persistenceIdentifier'][
'TCEforms'][
'config'][
'items'][] = [
142 $this->
getLanguageService()->sL(self::L10N_PREFIX .
'tt_content.preview.inaccessiblePersistenceIdentifier'),
143 $identifier[
'ext-form-persistenceIdentifier']
145 $identifier[
'ext-form-persistenceIdentifier'],
150 if (!empty($identifier[
'ext-form-persistenceIdentifier'])
152 && isset($identifier[
'ext-form-overrideFinishers'])
153 && $identifier[
'ext-form-overrideFinishers'] ===
true
155 $persistenceIdentifier = $identifier[
'ext-form-persistenceIdentifier'];
156 $formDefinition = $formPersistenceManager->load($persistenceIdentifier);
171 return $dataStructure;
183 if (!isset($formDefinition[
'finishers']) || empty($formDefinition[
'finishers'])) {
187 $prototypeName = $formDefinition[
'prototypeName'] ??
'standard';
188 $prototypeConfiguration = GeneralUtility::makeInstance(ObjectManager::class)
189 ->get(ConfigurationService::class)
190 ->getPrototypeConfiguration($prototypeName);
192 if (!isset($prototypeConfiguration[
'finishersDefinition']) || empty($prototypeConfiguration[
'finishersDefinition'])) {
196 $formIdentifier = $formDefinition[
'identifier'];
197 $finishersDefinition = $prototypeConfiguration[
'finishersDefinition'];
199 $sheets = [
'sheets' => []];
200 foreach ($formDefinition[
'finishers'] as $formFinisherDefinition) {
201 $finisherIdentifier = $formFinisherDefinition[
'identifier'];
202 if (!isset($finishersDefinition[$finisherIdentifier][
'FormEngine'][
'elements'])) {
206 $persistenceIdentifier,
214 $finishersDefinition,
215 $prototypeConfiguration
218 $prototypeFinisherDefinition = $finishersDefinition[$finisherIdentifier];
219 $finisherLabel = $prototypeFinisherDefinition[
'FormEngine'][
'label'] ??
'';
222 $converterDto = GeneralUtility::makeInstance(
225 $prototypeFinisherDefinition,
226 $formFinisherDefinition
231 GeneralUtility::makeInstance(ArrayProcessor::class, $prototypeFinisherDefinition[
'FormEngine'][
'elements'])->forEach(
232 GeneralUtility::makeInstance(
233 ArrayProcessing::class,
234 'convertToFlexFormSheets',
235 '^(.*)\.config\.type$',
236 GeneralUtility::makeInstance(FinisherOptionGenerator::class, $converterDto)
240 $sheet[$sheetIdentifier][
'ROOT'][
'el'] = $converterDto->getResult();
243 if (empty($sheets[
'sheets'])) {
260 if (empty($sheetIdentifier)) {
261 throw new \InvalidArgumentException(
'$sheetIdentifier must not be empty.', 1472060918);
263 if (empty($finisherName)) {
264 throw new \InvalidArgumentException(
'$finisherName must not be empty.', 1472060919);
268 $sheetIdentifier => [
271 'sheetTitle' => $finisherName,
287 if (!empty($persistenceIdentifier)) {
288 $dataStructure[
'sheets'][
'sDEF'][
'ROOT'][
'el'][
'settings.persistenceIdentifier'][
'TCEforms'][
'config'][
'items'][] = [
290 $this->
getLanguageService()->sL(self::L10N_PREFIX .
'tt_content.preview.inaccessiblePersistenceIdentifier'),
291 $persistenceIdentifier
293 $persistenceIdentifier,
297 return $dataStructure;
305 $messageText = sprintf(
306 $this->
getLanguageService()->sL(self::L10N_PREFIX .
'tt_content.preview.invalidFrameworkConfiguration.text'),
310 GeneralUtility::makeInstance(ObjectManager::class)
311 ->get(FlashMessageService::class)
312 ->getMessageQueueByIdentifier(
'core.template.flashMessages')
314 GeneralUtility::makeInstance(
317 $this->
getLanguageService()->sL(self::L10N_PREFIX .
'tt_content.preview.invalidFrameworkConfiguration.title'),
332 string $persistenceIdentifier,
333 string $prototypeName,
334 string $formIdentifier,
335 string $finisherIdentifier
339 $persistenceIdentifier,
354 string $finisherIdentifier,
355 array $finishersDefinition,
356 array $prototypeConfiguration
358 if (isset($finishersDefinition[$finisherIdentifier][
'FormEngine'][
'translationFile'])) {
359 $translationFile = $finishersDefinition[$finisherIdentifier][
'FormEngine'][
'translationFile'];
361 $translationFile = $prototypeConfiguration[
'formEngine'][
'translationFile'];
365 $finishersDefinition[$finisherIdentifier][
'FormEngine'],
369 return $finishersDefinition;