68 foreach ($formFieldNames as $formField) {
69 $formFieldParts = explode(
'[', $formField);
70 $currentPosition = &$formFieldArray;
71 $formFieldPartsCount = count($formFieldParts);
72 for ($i = 0; $i < $formFieldPartsCount; $i++) {
73 $formFieldPart = $formFieldParts[$i];
74 $formFieldPart = rtrim($formFieldPart,
']');
75 if (!is_array($currentPosition)) {
76 throw new \TYPO3\CMS\Extbase\Security\Exception\InvalidArgumentForHashGenerationException(
'The form field "' . $formField .
'" is declared as array, but it collides with a previous form field of the same name which declared the field as string. This is an inconsistency you need to fix inside your Fluid form. (String overridden by Array)', 1255072196);
78 if ($i === $formFieldPartsCount - 1) {
79 if (isset($currentPosition[$formFieldPart]) && is_array($currentPosition[$formFieldPart])) {
80 throw new \TYPO3\CMS\Extbase\Security\Exception\InvalidArgumentForHashGenerationException(
'The form field "' . $formField .
'" is declared as string, but it collides with a previous form field of the same name which declared the field as array. This is an inconsistency you need to fix inside your Fluid form. (Array overridden by String)', 1255072587);
83 if ($formFieldPart ===
'') {
84 $currentPosition[] = 1;
86 $currentPosition[$formFieldPart] = 1;
89 if ($formFieldPart ===
'') {
90 throw new \TYPO3\CMS\Extbase\Security\Exception\InvalidArgumentForHashGenerationException(
'The form field "' . $formField .
'" is invalid. Reason: "[]" used not as last argument, but somewhere in the middle (like foo[][bar]).', 1255072832);
92 if (!isset($currentPosition[$formFieldPart])) {
93 $currentPosition[$formFieldPart] = [];
95 $currentPosition = &$currentPosition[$formFieldPart];
99 if ($fieldNamePrefix !==
'') {
100 $formFieldArray = ($formFieldArray[$fieldNamePrefix] ?? []);
114 $serializedFormFieldArray = serialize($formFieldArray);
115 return $this->hashService->appendHmac($serializedFormFieldArray);
128 $trustedPropertiesToken = $request->getInternalArgument(
'__trustedProperties');
129 if (!is_string($trustedPropertiesToken)) {
134 $serializedTrustedProperties = $this->hashService->validateAndStripHmac($trustedPropertiesToken);
138 $trustedProperties = unserialize($serializedTrustedProperties, [
'allowed_classes' =>
false]);
139 foreach ($trustedProperties as $propertyName => $propertyConfiguration) {
140 if (!$controllerArguments->hasArgument($propertyName)) {
143 $propertyMappingConfiguration = $controllerArguments->getArgument($propertyName)->getPropertyMappingConfiguration();
160 if (!is_array($propertyConfiguration)) {
164 if (isset($propertyConfiguration[
'__identity'])) {
165 $propertyMappingConfiguration->setTypeConverterOption(\
TYPO3\CMS\
Extbase\Property\TypeConverter\PersistentObjectConverter::class, \
TYPO3\CMS\
Extbase\Property\TypeConverter\PersistentObjectConverter::CONFIGURATION_MODIFICATION_ALLOWED,
true);
166 unset($propertyConfiguration[
'__identity']);
168 $propertyMappingConfiguration->setTypeConverterOption(\
TYPO3\CMS\
Extbase\Property\TypeConverter\PersistentObjectConverter::class, \
TYPO3\CMS\
Extbase\Property\TypeConverter\PersistentObjectConverter::CONFIGURATION_CREATION_ALLOWED,
true);
171 foreach ($propertyConfiguration as $innerKey => $innerValue) {
172 if (is_array($innerValue)) {
175 $propertyMappingConfiguration->allowProperties($innerKey);