public function EntityDefinitionUpdateManager::getChangeList in Drupal 9
Same name and namespace in other branches
- 8 core/lib/Drupal/Core/Entity/EntityDefinitionUpdateManager.php \Drupal\Core\Entity\EntityDefinitionUpdateManager::getChangeList()
Gets a list of changes to entity type and field storage definitions.
Return value
array An associative array keyed by entity type ID of change descriptors. Every entry is an associative array with the following optional keys:
- entity_type: a scalar having one value among:
- field_storage_definitions: an associative array keyed by field name of scalars having one value among:
Overrides EntityDefinitionUpdateManagerInterface::getChangeList
2 calls to EntityDefinitionUpdateManager::getChangeList()
- EntityDefinitionUpdateManager::getChangeSummary in core/
lib/ Drupal/ Core/ Entity/ EntityDefinitionUpdateManager.php - Gets a human readable summary of the detected changes.
- EntityDefinitionUpdateManager::needsUpdates in core/
lib/ Drupal/ Core/ Entity/ EntityDefinitionUpdateManager.php - Checks if there are any definition updates that need to be applied.
File
- core/
lib/ Drupal/ Core/ Entity/ EntityDefinitionUpdateManager.php, line 247
Class
- EntityDefinitionUpdateManager
- Manages entity definition updates.
Namespace
Drupal\Core\EntityCode
public function getChangeList() {
$this->entityTypeManager
->useCaches(FALSE);
$this->entityFieldManager
->useCaches(FALSE);
$change_list = [];
foreach ($this->entityTypeManager
->getDefinitions() as $entity_type_id => $entity_type) {
$original = $this->entityLastInstalledSchemaRepository
->getLastInstalledDefinition($entity_type_id);
// @todo Support non-storage-schema-changing definition updates too:
// https://www.drupal.org/node/2336895.
if (!$original) {
$change_list[$entity_type_id]['entity_type'] = static::DEFINITION_CREATED;
}
else {
if ($this
->requiresEntityStorageSchemaChanges($entity_type, $original)) {
$change_list[$entity_type_id]['entity_type'] = static::DEFINITION_UPDATED;
}
if ($this->entityTypeManager
->getStorage($entity_type_id) instanceof DynamicallyFieldableEntityStorageInterface) {
$field_changes = [];
$storage_definitions = $this->entityFieldManager
->getFieldStorageDefinitions($entity_type_id);
$original_storage_definitions = $this->entityLastInstalledSchemaRepository
->getLastInstalledFieldStorageDefinitions($entity_type_id);
// Detect created field storage definitions.
foreach (array_diff_key($storage_definitions, $original_storage_definitions) as $field_name => $storage_definition) {
$field_changes[$field_name] = static::DEFINITION_CREATED;
}
// Detect deleted field storage definitions.
foreach (array_diff_key($original_storage_definitions, $storage_definitions) as $field_name => $original_storage_definition) {
$field_changes[$field_name] = static::DEFINITION_DELETED;
}
// Detect updated field storage definitions.
foreach (array_intersect_key($storage_definitions, $original_storage_definitions) as $field_name => $storage_definition) {
// @todo Support non-storage-schema-changing definition updates too:
// https://www.drupal.org/node/2336895. So long as we're checking
// based on schema change requirements rather than definition
// equality, skip the check if the entity type itself needs to be
// updated, since that can affect the schema of all fields, so we
// want to process that update first without reporting false
// positives here.
if (!isset($change_list[$entity_type_id]['entity_type']) && $this
->requiresFieldStorageSchemaChanges($storage_definition, $original_storage_definitions[$field_name])) {
$field_changes[$field_name] = static::DEFINITION_UPDATED;
}
}
if ($field_changes) {
$change_list[$entity_type_id]['field_storage_definitions'] = $field_changes;
}
}
}
}
// @todo Support deleting entity definitions when we support base field
// purging.
// @see https://www.drupal.org/node/2907779
$this->entityTypeManager
->useCaches(TRUE);
$this->entityFieldManager
->useCaches(TRUE);
return array_filter($change_list);
}