Update 2024-09-25 12:04:01

This commit is contained in:
Robot 2024-09-25 00:04:36 +02:00
parent 73dc7abc5d
commit bfba10e61e
Signed by: Robot
GPG Key ID: 14DECD44E7E1BB95
3 changed files with 100 additions and 0 deletions

View File

@ -31,6 +31,7 @@ class MultiSubform << (F,LightGreen) >> #RoyalBlue {
- handleRegularSetMap(array $subform, array $map, ...) : bool
- validGetMap(array $map) : bool
- validSetMap(array $map) : bool
- prepLinkValue(array $subform, array $setMap) : void
}
note right of MultiSubform::__construct
@ -252,6 +253,13 @@ Ensures all required keys are present and have valid values.
since: 3.2.2
return: bool
end note
note right of MultiSubform::prepLinkValue
Prepare the linkValue needed by the sub-subform
since: 5.0.3
return: void
end note
@enduml
```

View File

@ -130,6 +130,13 @@ final class MultiSubform implements MultiSubformInterface
{
$items = []; // will delete all existing linked items :( not ideal, but real
}
else
{
// make sure the sub-subform:linkValue[data:guid]
// is set with the needed key if possible
// this ensures that new sub-subform data is correctly linked
$this->prepLinkValue($items, $setMap);
}
// Save the core data
if (!$this->setSubformData($items, $setMap['_core']))
@ -515,6 +522,45 @@ final class MultiSubform implements MultiSubformInterface
}
return true; // All checks passed
}
/**
* Prepare the linkValue needed by the sub-subform
*
* @param array $subform The subform data
* @param array $setMap Mapping data for processing subforms
*
* @return void
* @since 5.0.3
*/
private function prepLinkValue(array &$subform, array $setMap): void
{
$code_table = null;
foreach ($setMap as $key => $map)
{
if ($key === '_core')
{
$code_table = $map['table'] ?? null;
continue;
}
if (strpos($map['linkValue'], ':') !== false)
{
[$table, $field] = explode(':', $map['linkValue']);
if ($code_table !== null &&
'guid' === $field &&
$table === $code_table)
{
foreach ($subform as &$row)
{
if (empty($row['guid']))
{
$row['guid'] = $this->subform->table($table)->getGuid($field);
}
}
}
}
}
}
}

View File

@ -105,6 +105,13 @@
{
$items = []; // will delete all existing linked items :( not ideal, but real
}
else
{
// make sure the sub-subform:linkValue[data:guid]
// is set with the needed key if possible
// this ensures that new sub-subform data is correctly linked
$this->prepLinkValue($items, $setMap);
}
// Save the core data
if (!$this->setSubformData($items, $setMap['_core']))
@ -490,4 +497,43 @@
}
return true; // All checks passed
}
/**
* Prepare the linkValue needed by the sub-subform
*
* @param array $subform The subform data
* @param array $setMap Mapping data for processing subforms
*
* @return void
* @since 5.0.3
*/
private function prepLinkValue(array &$subform, array $setMap): void
{
$code_table = null;
foreach ($setMap as $key => $map)
{
if ($key === '_core')
{
$code_table = $map['table'] ?? null;
continue;
}
if (strpos($map['linkValue'], ':') !== false)
{
[$table, $field] = explode(':', $map['linkValue']);
if ($code_table !== null &&
'guid' === $field &&
$table === $code_table)
{
foreach ($subform as &$row)
{
if (empty($row['guid']))
{
$row['guid'] = $this->subform->table($table)->getGuid($field);
}
}
}
}
}
}