mirror of
https://github.com/SuiteCRM/SuiteCRM-Core.git
synced 2025-09-02 08:09:19 +08:00
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:
parent
a0d06eb70b
commit
5e60672505
2 changed files with 40 additions and 11 deletions
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue