diff -u b/core/lib/Drupal/Core/Config/Entity/ConfigDependencyManager.php b/core/lib/Drupal/Core/Config/Entity/ConfigDependencyManager.php --- b/core/lib/Drupal/Core/Config/Entity/ConfigDependencyManager.php +++ b/core/lib/Drupal/Core/Config/Entity/ConfigDependencyManager.php @@ -15,6 +15,16 @@ */ class ConfigDependencyManager { + /** + * @todo + */ + const DIRECTION_DEPENDENTS = 'reverse_paths'; + + /** + * @todo + */ + const DIRECTION_REQUIREMENTS = 'paths'; + protected $storage; protected $allTheThingies; @@ -49,9 +59,13 @@ * Creates a graph of config entity dependencies. * * @param array $entities_to_check - * The entities to supply dependencies for + * The entities to supply dependencies for. + * @param string $direction + * The direction of the dependencies to check. Defaults to + * ConfigDependencyManager::DIRECTION_DEPENDENTS, alternate value is + * ConfigDependencyManager::DIRECTION_REQUIREMENTS. */ - protected function graphConfigEntityDependencies($entities_to_check) { + protected function graphConfigEntityDependencies($entities_to_check, $direction = ConfigDependencyManager::DIRECTION_DEPENDENTS) { $dependent_entities = array(); // Load all the things. $all_the_thingies = $this->loadAllTheThingies(); @@ -68,8 +82,8 @@ $graph_object = new Graph($graph); $graph = $graph_object->searchAndSort(); foreach ($entities_to_check as $entity) { - if (isset($graph[$entity]) && !empty($graph[$entity]['paths'])){ - foreach ($graph[$entity]['paths'] as $dependency_name => $value) { + if (isset($graph[$entity]) && !empty($graph[$entity][$direction])){ + foreach ($graph[$entity][$direction] as $dependency_name => $value) { $config_name = substr($dependency_name, 0, strpos($dependency_name, ':')); $dependent_entities[$config_name] = $all_the_thingies[$config_name]; } diff -u b/core/modules/config/lib/Drupal/config/Tests/ConfigEntityUnitTest.php b/core/modules/config/lib/Drupal/config/Tests/ConfigEntityUnitTest.php --- b/core/modules/config/lib/Drupal/config/Tests/ConfigEntityUnitTest.php +++ b/core/modules/config/lib/Drupal/config/Tests/ConfigEntityUnitTest.php @@ -122,36 +122,37 @@ $config_manager = \Drupal::service('config.manager'); - // Test getting $entity3's dependencies as configuration dependency objects. - $dependents = $config_manager->findConfigEntityDependents('entity', array($entity3->getConfigDependencyName())); - $this->assertTrue(isset($dependents['config_test.dynamic.entity1']), 'config_test.dynamic.entity3 has a dependency on config_test.dynamic.entity1.'); - $this->assertTrue(isset($dependents['config_test.dynamic.entity2']), 'config_test.dynamic.entity3 has a dependency on config_test.dynamic.entity2.'); - $this->assertFalse(isset($dependents['config_test.dynamic.entity3']), 'config_test.dynamic.entity3 does not have a dependency on itself.'); - $this->assertFalse(isset($dependents['config_test.dynamic.entity4']), 'config_test.dynamic.entity3 does not have a dependency on config_test.dynamic.entity4.'); - - // Test getting $entity4's dependencies as entities. - $dependents = $config_manager->findConfigEntityDependentsAsEntities('entity', array($entity4->getConfigDependencyName())); - $this->assertTrue(isset($dependents['entity1']), 'config_test.dynamic.entity4 has a dependency on config_test.dynamic.entity1.'); - $this->assertTrue(isset($dependents['entity2']), 'config_test.dynamic.entity4 has a dependency on config_test.dynamic.entity2.'); - $this->assertTrue(isset($dependents['entity3']), 'config_test.dynamic.entity4 has a dependency on config_test.dynamic.entity3.'); - $this->assertFalse(isset($dependents['entity4']), 'config_test.dynamic.entity4 does not have a dependency on itself.'); + // Test getting $entity1's dependencies as configuration dependency objects. + $dependents = $config_manager->findConfigEntityDependents('entity', array($entity1->getConfigDependencyName())); + $this->assertFalse(isset($dependents['config_test.dynamic.entity1']), 'config_test.dynamic.entity1 does not have a dependency on itself.'); + $this->assertTrue(isset($dependents['config_test.dynamic.entity2']), 'config_test.dynamic.entity1 has a dependency on config_test.dynamic.entity1.'); + $this->assertTrue(isset($dependents['config_test.dynamic.entity3']), 'config_test.dynamic.entity1 has a dependency on config_test.dynamic.entity1.'); + $this->assertTrue(isset($dependents['config_test.dynamic.entity4']), 'config_test.dynamic.entity1 has a dependency on config_test.dynamic.entity1.'); + + // Test getting $entity2's dependencies as entities. + $dependents = $config_manager->findConfigEntityDependentsAsEntities('entity', array($entity2->getConfigDependencyName())); + $this->assertFalse(isset($dependents['entity1']), 'config_test.dynamic.entity2 does not have a dependency on config_test.dynamic.entity1.'); + $this->assertFalse(isset($dependents['entity2']), 'config_test.dynamic.entity2 does not have a dependency on itself.'); + $this->assertTrue(isset($dependents['entity3']), 'config_test.dynamic.entity2 has a dependency on config_test.dynamic.entity3.'); + $this->assertTrue(isset($dependents['entity4']), 'config_test.dynamic.entity2 has a dependency on config_test.dynamic.entity3.'); // Test getting node module's dependencies as configuration dependency // objects. $dependents = $config_manager->findConfigEntityDependents('module', array('node')); $this->assertTrue(isset($dependents['config_test.dynamic.entity1']), 'config_test.dynamic.entity1 has a dependency on the Node module.'); - $this->assertFalse(isset($dependents['config_test.dynamic.entity2']), 'config_test.dynamic.entity2 does not have a dependency on thew Node module.'); - $this->assertFalse(isset($dependents['config_test.dynamic.entity3']), 'config_test.dynamic.entity3 does not have a dependency on thew Node module.'); - $this->assertFalse(isset($dependents['config_test.dynamic.entity4']), 'config_test.dynamic.entity4 does not have a dependency on thew Node module.'); + $this->assertTrue(isset($dependents['config_test.dynamic.entity2']), 'config_test.dynamic.entity2 has a dependency on the Node module.'); + $this->assertTrue(isset($dependents['config_test.dynamic.entity3']), 'config_test.dynamic.entity3 has a dependency on the Node module.'); + $this->assertTrue(isset($dependents['config_test.dynamic.entity4']), 'config_test.dynamic.entity4 has a dependency on the Node module.'); // Test getting node module's dependencies as configuration dependency // objects after making $entity3 also dependent on node. + $entity1->removeDependency('module', 'node')->save(); $entity3->createDependency('module', 'node')->save(); $dependents = $config_manager->findConfigEntityDependents('module', array('node')); - $this->assertTrue(isset($dependents['config_test.dynamic.entity1']), 'config_test.dynamic.entity1 has a dependency on the Node module.'); - $this->assertTrue(isset($dependents['config_test.dynamic.entity2']), 'config_test.dynamic.entity2 has a dependency on thew Node module.'); - $this->assertTrue(isset($dependents['config_test.dynamic.entity3']), 'config_test.dynamic.entity3 has a dependency on thew Node module.'); - $this->assertFalse(isset($dependents['config_test.dynamic.entity4']), 'config_test.dynamic.entity4 does not have a dependency on thew Node module.'); + $this->assertFalse(isset($dependents['config_test.dynamic.entity1']), 'config_test.dynamic.entity1 does not have a dependency on the Node module.'); + $this->assertFalse(isset($dependents['config_test.dynamic.entity2']), 'config_test.dynamic.entity2 does not have a dependency on the Node module.'); + $this->assertTrue(isset($dependents['config_test.dynamic.entity3']), 'config_test.dynamic.entity3 has a dependency on the Node module.'); + $this->assertTrue(isset($dependents['config_test.dynamic.entity4']), 'config_test.dynamic.entity4 has a dependency on the Node module.'); }