/** * Reformat array for createAction * * @return void */ protected function reformatParamsForAction() { BasicFileUtility::rewriteFilesArrayToPreventDuplicatFilenames(); $arguments = $this->request->getArguments(); if (!isset($arguments['field'])) { return; } $newArguments = ['mail' => $arguments['mail']]; // allow subvalues in new property mapper $mailMvcArgument = $this->arguments->getArgument('mail'); $propertyMappingConfiguration = $mailMvcArgument->getPropertyMappingConfiguration(); $propertyMappingConfiguration->allowProperties('answers'); $propertyMappingConfiguration->allowCreationForSubProperty('answers'); $propertyMappingConfiguration->allowModificationForSubProperty('answers'); $propertyMappingConfiguration->allowProperties('form'); $propertyMappingConfiguration->allowCreationForSubProperty('form'); $propertyMappingConfiguration->allowModificationForSubProperty('form'); // allow creation of new objects (for validation) $propertyMappingConfiguration->setTypeConverterOptions('TYPO3\\CMS\\Extbase\\Property\\TypeConverter\\PersistentObjectConverter', [PersistentObjectConverter::CONFIGURATION_CREATION_ALLOWED => true, PersistentObjectConverter::CONFIGURATION_MODIFICATION_ALLOWED => true]); $i = 0; foreach ((array) $arguments['field'] as $marker => $value) { // ignore internal fields (honeypod) if (substr($marker, 0, 2) === '__') { continue; } $fieldUid = $this->fieldRepository->getFieldUidFromMarker($marker, $arguments['mail']['form']); // Skip fields without Uid (secondary password, upload) if ($fieldUid === 0) { continue; } // allow subvalues in new property mapper $propertyMappingConfiguration->forProperty('answers')->allowProperties($i); $propertyMappingConfiguration->forProperty('answers.' . $i)->allowAllProperties(); $propertyMappingConfiguration->allowCreationForSubProperty('answers.' . $i); $propertyMappingConfiguration->allowModificationForSubProperty('answers.' . $i); /** @var Field $field */ $field = $this->fieldRepository->findByUid($fieldUid); $valueType = $field->dataTypeFromFieldType($this->fieldRepository->getFieldTypeFromMarker($marker, $arguments['mail']['form'])); if ($valueType === 3 && is_array($value)) { $value = BasicFileUtility::getUniqueNamesForFileUploads($value, $this->settings, false); } if (is_array($value)) { if (empty($value)) { $value = ''; } else { $value = json_encode($value); } } $newArguments['mail']['answers'][$i] = ['field' => strval($fieldUid), 'value' => $value, 'valueType' => $valueType]; // edit form: add answer id if (!empty($arguments['field']['__identity'])) { $answer = $this->answerRepository->findByFieldAndMail($fieldUid, $arguments['field']['__identity']); if ($answer !== null) { $newArguments['mail']['answers'][$i]['__identity'] = $answer->getUid(); } } $i++; } // edit form: add mail id if (!empty($arguments['field']['__identity'])) { $newArguments['mail']['__identity'] = $arguments['field']['__identity']; } $this->request->setArguments($newArguments); $this->request->setArgument('field', null); }