Add match all and unset to field definition mapper

- Add option to map only if all from fields match
- Add option to enable/disable unsetting
This commit is contained in:
Clemente Raposo 2022-03-07 17:30:10 +00:00 committed by c.raposo
parent a0d06eb70b
commit 5e60672505
2 changed files with 40 additions and 11 deletions

View file

@ -87,12 +87,14 @@ class LegacyToFrontendFieldDefinitionMapper implements FieldDefinitionMapperInte
$legacyFieldsMap = $mapDefinition['from'] ?? [];
$toProperties = $mapDefinition['to'] ?? [];
$unset = $mapDefinition['unset'] ?? false;
$matchAll = $mapDefinition['matchAll'] ?? true;
if (empty($mapDefinition) || empty($legacyFieldsMap) || empty($toProperties)) {
continue;
}
$this->mapFieldDefinitions($fieldDefinition, $legacyFieldsMap, $toProperties);
$this->mapFieldDefinitions($fieldDefinition, $legacyFieldsMap, $toProperties, $unset, $matchAll);
}
}
@ -100,15 +102,22 @@ class LegacyToFrontendFieldDefinitionMapper implements FieldDefinitionMapperInte
* @param FieldDefinition $fieldDefinition
* @param array $legacyMap
* @param array $frontendMap
* @param bool $unset
* @param bool $matchAll
* @return void
* @desc maps legacy to front-end field format for Record Vardefs
*/
public function mapFieldDefinitions(FieldDefinition $fieldDefinition, array $legacyMap, array $frontendMap): void
{
public function mapFieldDefinitions(
FieldDefinition $fieldDefinition,
array $legacyMap,
array $frontendMap,
bool $unset = false,
bool $matchAll = true
): void {
$vardefs = $fieldDefinition->getVardef() ?? [];
$service = new LegacyToFrontendDefinitionMapper();
$transformedVardefs = $service->getTransformedVardefs($vardefs, $legacyMap, $frontendMap);
$transformedVardefs = $service->getTransformedVardefs($vardefs, $legacyMap, $frontendMap, $unset, $matchAll);
$fieldDefinition->setVardef($transformedVardefs);
}

View file

@ -45,16 +45,23 @@ class LegacyToFrontendDefinitionMapper
* @param array $vardefs
* @param array $legacyMap
* @param array $frontendMap
* @param bool $unset
* @param bool $matchAll
* @return array return transformed vardefs
*/
public function getTransformedVardefs(array $vardefs, array $legacyMap, array $frontendMap): array
{
public function getTransformedVardefs(
array $vardefs,
array $legacyMap,
array $frontendMap,
bool $unset = false,
bool $matchAll = true
): array {
if (empty($vardefs)) {
return [];
}
foreach ($vardefs as $name => $vardef) {
$vardefs[$name] = $this->transformVardef($vardef, $legacyMap, $frontendMap);
$vardefs[$name] = $this->transformVardef($vardef, $legacyMap, $frontendMap, $unset, $matchAll);
}
return $vardefs;
@ -64,18 +71,31 @@ class LegacyToFrontendDefinitionMapper
* @param array $vardef
* @param array $legacyMap
* @param array $frontendMap
* @param bool $unset
* @param bool $matchAll
* @return array return transformed vardef
*/
public function transformVardef(array $vardef, array $legacyMap, array $frontendMap): array
{
public function transformVardef(
array $vardef,
array $legacyMap,
array $frontendMap,
bool $unset = false,
bool $matchAll = true
): array {
$matches = array_uintersect_uassoc($vardef, $legacyMap, "strcasecmp", "strcasecmp");
if (empty($matches)) {
return $vardef;
}
foreach (array_keys($matches) as $matchKey) {
unset($vardef[$matchKey]);
if ($matchAll && count(array_keys($matches)) !== count(array_keys($legacyMap))) {
return $vardef;
}
if ($unset === true) {
foreach (array_keys($matches) as $matchKey) {
unset($vardef[$matchKey]);
}
}
return array_merge($vardef, $frontendMap);