Skip to content
Snippets Groups Projects

Issue #3449899: Additional mapping not saving as expected

10 files
+ 56
74
Compare changes
  • Side-by-side
  • Inline
Files
10
@@ -264,16 +264,18 @@ class SchemaDotOrgAdditionalMappingsManager implements SchemaDotOrgAdditionalMap
return;
}
/** @var \Drupal\schemadotorg\Entity\SchemaDotOrgMapping $mapping */
$entity_type_id = $mapping->getTargetEntityTypeId();
$bundle = $mapping->getTargetBundle();
$schema_type = $mapping->get('schema_type');
$schema_properties = $mapping->get('schema_properties');
$original = (isset($mapping->original)) ? clone $mapping->original : NULL;
$additional_mappings = $mapping->getAdditionalMappings();
foreach ($additional_mappings as $additional_mapping) {
$additional_schema_type = $additional_mapping['schema_type'];
$additional_schema_properties_field_names = array_flip($additional_mapping['schema_properties']);
$additional_schema_properties = $additional_mapping['schema_properties'];
if ($this->schemaTypeManager->isSubTypeOf($additional_schema_type, $schema_type)) {
continue;
}
@@ -288,6 +290,7 @@ class SchemaDotOrgAdditionalMappingsManager implements SchemaDotOrgAdditionalMap
$mapping_defaults['entity']['id'] = $bundle;
// Set the additional mapping properties.
$additional_schema_properties_field_names = array_flip($additional_schema_properties);
foreach ($mapping_defaults['properties'] as $schema_property => &$field) {
$field['name'] = $additional_schema_properties_field_names[$schema_property] ?? NULL;
}
@@ -295,9 +298,23 @@ class SchemaDotOrgAdditionalMappingsManager implements SchemaDotOrgAdditionalMap
// Clear the additional mappings to prevent a recursion.
$mapping_defaults['additional_mappings'] = [];
// Update the mapping.
$mapping
->set('schema_type', $additional_schema_type)
->set('schema_properties', $additional_schema_properties)
->set('additional_mappings', []);
// Set original mapping.
if (isset($mapping->original)) {
$additional_mapping_original = $original->getAdditionalMapping($additional_schema_type);
$mapping->original->set('schema_properties', $additional_schema_type);
$mapping->original->set('schema_properties', $additional_mapping_original['schema_properties'] ?? []);
$mapping->original->set('additional_mappings', []);
}
// Save the additional mapping to create expected fields, forms, and displays
// and get back the updated mapping, which will be reverted.
$mapping = $this->schemaMappingManager->saveMapping($entity_type_id, $additional_schema_type, $mapping_defaults);
$this->schemaMappingManager->saveMapping($entity_type_id, $additional_schema_type, $mapping_defaults, $mapping);
}
// Re-save the original mapping with update additional mappings
@@ -307,8 +324,9 @@ class SchemaDotOrgAdditionalMappingsManager implements SchemaDotOrgAdditionalMap
->set('target_bundle', $bundle)
->set('schema_type', $schema_type)
->set('schema_properties', $schema_properties)
->set('additional_mappings', $additional_mappings)
->save();
->set('additional_mappings', $additional_mappings);
$mapping->original = $original;
$mapping->save();
$mapping->setSyncing(FALSE);
}
Loading