getStorage($entity_type->id())); $this->entityManager = $entity_manager; $this->fieldTypeManager = $field_type_manager; } /** * {@inheritdoc} */ public static function createInstance(ContainerInterface $container, EntityTypeInterface $entity_type) { return new static($entity_type, $container->get('entity.manager'), $container->get('plugin.manager.field.field_type')); } /** * {@inheritdoc} */ public function render($target_entity_type_id = NULL, $target_bundle = NULL) { $this->targetEntityTypeId = $target_entity_type_id; $this->targetBundle = $target_bundle; $build = parent::render(); $build['table']['#attributes']['id'] = 'field-overview'; $build['table']['#empty'] = $this->t('No fields are present yet.'); return $build; } /** * {@inheritdoc} */ public function load() { $entities = array_filter($this->entityManager->getFieldDefinitions($this->targetEntityTypeId, $this->targetBundle), function ($field_definition) { return $field_definition instanceof FieldConfigInterface; }); // Sort the entities using the entity class's sort() method. // See \Drupal\Core\Config\Entity\ConfigEntityBase::sort(). uasort($entities, [$this->entityType->getClass(), 'sort']); return $entities; } /** * {@inheritdoc} */ public function buildHeader() { $header = [ 'label' => $this->t('Label'), 'field_name' => [ 'data' => $this->t('Machine name'), 'class' => [RESPONSIVE_PRIORITY_MEDIUM], ], 'field_type' => $this->t('Field type'), ]; return $header + parent::buildHeader(); } /** * {@inheritdoc} */ public function buildRow(EntityInterface $field_config) { /** @var \Drupal\field\FieldConfigInterface $field_config */ $field_storage = $field_config->getFieldStorageDefinition(); $route_parameters = [ 'field_config' => $field_config->id(), ] + FieldUI::getRouteBundleParameter($this->entityManager->getDefinition($this->targetEntityTypeId), $this->targetBundle); $row = [ 'id' => Html::getClass($field_config->getName()), 'data' => [ 'label' => $field_config->getLabel(), 'field_name' => $field_config->getName(), 'field_type' => [ 'data' => [ '#type' => 'link', '#title' => $this->fieldTypeManager->getDefinitions()[$field_storage->getType()]['label'], '#url' => Url::fromRoute("entity.field_config.{$this->targetEntityTypeId}_storage_edit_form", $route_parameters), '#options' => ['attributes' => ['title' => $this->t('Edit field settings.')]], ], ], ], ]; // Add the operations. $row['data'] = $row['data'] + parent::buildRow($field_config); if ($field_storage->isLocked()) { $row['data']['operations'] = ['data' => ['#markup' => $this->t('Locked')]]; $row['class'][] = 'menu-disabled'; } return $row; } /** * {@inheritdoc} */ public function getDefaultOperations(EntityInterface $entity) { /** @var \Drupal\field\FieldConfigInterface $entity */ $operations = parent::getDefaultOperations($entity); if ($entity->access('update') && $entity->hasLinkTemplate("{$entity->getTargetEntityTypeId()}-field-edit-form")) { $operations['edit'] = [ 'title' => $this->t('Edit'), 'weight' => 10, 'url' => $entity->urlInfo("{$entity->getTargetEntityTypeId()}-field-edit-form"), 'attributes' => [ 'title' => $this->t('Edit field settings.'), ], ]; } if ($entity->access('delete') && $entity->hasLinkTemplate("{$entity->getTargetEntityTypeId()}-field-delete-form")) { $operations['delete'] = [ 'title' => $this->t('Delete'), 'weight' => 100, 'url' => $entity->urlInfo("{$entity->getTargetEntityTypeId()}-field-delete-form"), 'attributes' => [ 'title' => $this->t('Delete field.'), ], ]; } $operations['storage-settings'] = [ 'title' => $this->t('Storage settings'), 'weight' => 20, 'attributes' => ['title' => $this->t('Edit storage settings.')], 'url' => $entity->urlInfo("{$entity->getTargetEntityTypeId()}-storage-edit-form"), ]; return $operations; } }