protected function EntityDefinitionUpdateManager::getChangeList in Zircon Profile 8
Same name and namespace in other branches
- 8.0 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 only the DEFINITION_UPDATED value.
- field_storage_definitions: an associative array keyed by field name of
scalars having one value among:
- DEFINITION_CREATED
- DEFINITION_UPDATED
- DEFINITION_DELETED
3 calls to EntityDefinitionUpdateManager::getChangeList()
- EntityDefinitionUpdateManager::applyUpdates in core/
lib/ Drupal/ Core/ Entity/ EntityDefinitionUpdateManager.php - Applies all the detected valid changes.
- 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 266 - Contains \Drupal\Core\Entity\EntityDefinitionUpdateManager.
Class
- EntityDefinitionUpdateManager
- Manages entity definition updates.
Namespace
Drupal\Core\EntityCode
protected function getChangeList() {
$this->entityManager
->useCaches(FALSE);
$change_list = array();
foreach ($this->entityManager
->getDefinitions() as $entity_type_id => $entity_type) {
$original = $this->entityManager
->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->entityManager
->getStorage($entity_type_id) instanceof DynamicallyFieldableEntityStorageInterface) {
$field_changes = array();
$storage_definitions = $this->entityManager
->getFieldStorageDefinitions($entity_type_id);
$original_storage_definitions = $this->entityManager
->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/2282119.
$this->entityManager
->useCaches(TRUE);
return array_filter($change_list);
}