limit = FALSE; $this->entityTypes = $entity_types; } /** * {@inheritdoc} */ public static function createInstance(ContainerInterface $container, EntityTypeInterface $entity_type) { $entity_manager = $container->get('entity.manager'); return new static( $entity_type, $entity_manager->getStorage($entity_type->id()), $entity_manager->getDefinitions() ); } /** * {@inheritdoc} */ public function buildHeader() { $header['label'] = $this->t('Name'); return $header + parent::buildHeader(); } /** * {@inheritdoc} */ public function buildRow(EntityInterface $entity) { $row['label'] = $entity->label(); return $row + parent::buildRow($entity); } /** * {@inheritdoc} */ public function load() { $entities = []; foreach (parent::load() as $entity) { $entities[$entity->getTargetType()][] = $entity; } return $entities; } /** * {@inheritdoc} */ public function render() { $build = []; foreach ($this->load() as $entity_type => $entities) { if (!isset($this->entityTypes[$entity_type])) { continue; } // Filter entities. if (!$this->isValidEntity($entity_type)) { continue; } $table = [ '#prefix' => '

' . $this->entityTypes[$entity_type]->getLabel() . '

', '#type' => 'table', '#header' => $this->buildHeader(), '#rows' => [], ]; foreach ($entities as $entity) { if ($row = $this->buildRow($entity)) { $table['#rows'][$entity->id()] = $row; } } // Move content at the top. if ($entity_type == 'node') { $table['#weight'] = -10; } $short_type = str_replace(['entity_', '_mode'], '', $this->entityTypeId); $table['#rows']['_add_new'][] = [ 'data' => [ '#type' => 'link', '#url' => Url::fromRoute($short_type == 'view' ? 'entity.entity_view_mode.add_form' : 'entity.entity_form_mode.add_form', ['entity_type_id' => $entity_type]), '#title' => $this->t('Add new %label @entity-type', ['%label' => $this->entityTypes[$entity_type]->getLabel(), '@entity-type' => $this->entityType->getLowercaseLabel()]), ], 'colspan' => count($table['#header']), ]; $build[$entity_type] = $table; } return $build; } /** * Filters entities based on their view builder handlers. * * @param $entity_type * The entity type of the entity that needs to be validated. * * @return bool * TRUE if the entity has the correct view builder handler, FALSE if the * entity doesn't have the correct view builder handler. */ protected function isValidEntity($entity_type) { return $this->entityTypes[$entity_type]->get('field_ui_base_route') && $this->entityTypes[$entity_type]->hasViewBuilderClass(); } }