protected function ConfigManager::callOnDependencyRemoval in Drupal 9
Same name and namespace in other branches
- 8 core/lib/Drupal/Core/Config/ConfigManager.php \Drupal\Core\Config\ConfigManager::callOnDependencyRemoval()
Calls an entity's onDependencyRemoval() method.
A helper method to call onDependencyRemoval() with the correct list of affected entities. This list should only contain dependencies on the entity. Configuration and content entity dependencies will be converted into entity objects.
Parameters
\Drupal\Core\Config\Entity\ConfigEntityInterface $entity: The entity to call onDependencyRemoval() on.
\Drupal\Core\Config\Entity\ConfigEntityInterface[] $dependent_entities: The list of dependent configuration entities.
string $type: The type of dependency being checked. Either 'module', 'theme', 'config' or 'content'.
array $names: The specific names to check. If $type equals 'module' or 'theme' then it should be a list of module names or theme names. In the case of 'config' or 'content' it should be a list of configuration dependency names.
Return value
bool TRUE if the entity has changed as a result of calling the onDependencyRemoval() method, FALSE if not.
1 call to ConfigManager::callOnDependencyRemoval()
- ConfigManager::getConfigEntitiesToChangeOnDependencyRemoval in core/
lib/ Drupal/ Core/ Config/ ConfigManager.php - Lists which config entities to update and delete on removal of a dependency.
File
- core/
lib/ Drupal/ Core/ Config/ ConfigManager.php, line 441
Class
- ConfigManager
- The ConfigManager provides helper functions for the configuration system.
Namespace
Drupal\Core\ConfigCode
protected function callOnDependencyRemoval(ConfigEntityInterface $entity, array $dependent_entities, $type, array $names) {
$entity_dependencies = $entity
->getDependencies();
if (empty($entity_dependencies)) {
// No dependent entities nothing to do.
return FALSE;
}
$affected_dependencies = [
'config' => [],
'content' => [],
'module' => [],
'theme' => [],
];
// Work out if any of the entity's dependencies are going to be affected.
if (isset($entity_dependencies[$type])) {
// Work out which dependencies the entity has in common with the provided
// $type and $names.
$affected_dependencies[$type] = array_intersect($entity_dependencies[$type], $names);
// If the dependencies are entities we need to convert them into objects.
if ($type == 'config' || $type == 'content') {
$affected_dependencies[$type] = array_map(function ($name) use ($type) {
if ($type == 'config') {
return $this
->loadConfigEntityByName($name);
}
else {
// Ignore the bundle.
list($entity_type_id, , $uuid) = explode(':', $name);
return $this->entityRepository
->loadEntityByConfigTarget($entity_type_id, $uuid);
}
}, $affected_dependencies[$type]);
}
}
// Merge any other configuration entities into the list of affected
// dependencies if necessary.
if (isset($entity_dependencies['config'])) {
foreach ($dependent_entities as $dependent_entity) {
if (in_array($dependent_entity
->getConfigDependencyName(), $entity_dependencies['config'])) {
$affected_dependencies['config'][] = $dependent_entity;
}
}
}
// Key the entity arrays by config dependency name to make searching easy.
foreach ([
'config',
'content',
] as $dependency_type) {
$affected_dependencies[$dependency_type] = array_combine(array_map(function ($entity) {
return $entity
->getConfigDependencyName();
}, $affected_dependencies[$dependency_type]), $affected_dependencies[$dependency_type]);
}
// Inform the entity.
return $entity
->onDependencyRemoval($affected_dependencies);
}