You are here

function entity_hierarchy_entity_type_build in Entity Reference Hierarchy 3.x

Same name and namespace in other branches
  1. 8.2 entity_hierarchy.module \entity_hierarchy_entity_type_build()
  2. 8 entity_hierarchy.module \entity_hierarchy_entity_type_build()

Implements

See also

hook_entity_type_build().

\Drupal\entity_hierarchy\Form\HierarchyChildrenForm

File

./entity_hierarchy.module, line 38
A module to make entities hierarchical.

Code

function entity_hierarchy_entity_type_build(array &$entity_types) {

  /** @var \Drupal\Core\Entity\EntityTypeInterface[] $entity_types */

  // Adds the entity_hierarchy_reorder link template.
  foreach ($entity_types as $entity_type_id => $entity_type) {
    if (!$entity_type instanceof ContentEntityType || !$entity_type
      ->hasLinkTemplate('canonical')) {
      continue;
    }
    $providers = $entity_type
      ->getRouteProviderClasses() ?: [];
    if (empty($providers['entity_hierarchy'])) {
      $providers['entity_hierarchy'] = EntityHierarchyRouteProvider::class;
      $entity_types[$entity_type_id]
        ->setHandlerClass('route_provider', $providers);
    }

    // We have to add this for every content entity-type, regardless of if it
    // has hierarchy fields or not, because you cannot use the field manager
    // during a hook_entity_type_build, as it will cause recursion.
    $entity_types[$entity_type_id]
      ->setFormClass('entity_hierarchy_reorder', HierarchyChildrenForm::class)
      ->setHandlerClass('entity_hierarchy', EntityHierarchyHandler::class)
      ->setLinkTemplate('entity_hierarchy_reorder', $entity_type
      ->getLinkTemplate('canonical') . '/children');
  }
  if (isset($entity_types['node'])) {
    $entity_types['node']
      ->setHandlerClass('entity_hierarchy', NodeEntityHierarchyHandler::class);
  }
}