You are here

public function MetadataGenerator::generateFieldMetadata in Drupal 10

Same name and namespace in other branches
  1. 8 core/modules/quickedit/src/MetadataGenerator.php \Drupal\quickedit\MetadataGenerator::generateFieldMetadata()
  2. 9 core/modules/quickedit/src/MetadataGenerator.php \Drupal\quickedit\MetadataGenerator::generateFieldMetadata()

File

core/modules/quickedit/src/MetadataGenerator.php, line 69

Class

MetadataGenerator
Generates in-place editing metadata for an entity field.

Namespace

Drupal\quickedit

Code

public function generateFieldMetadata(FieldItemListInterface $items, $view_mode) {
  $entity = $items
    ->getEntity();
  $field_name = $items
    ->getFieldDefinition()
    ->getName();

  // Early-return if user does not have access.
  $access = $this->accessChecker
    ->accessEditEntityField($entity, $field_name);
  if (!$access
    ->isAllowed()) {
    return [
      'access' => FALSE,
    ];
  }

  // Early-return if no editor is available.
  $formatter_id = EntityViewDisplay::collectRenderDisplay($entity, $view_mode)
    ->getRenderer($field_name)
    ->getPluginId();
  $editor_id = $this->editorSelector
    ->getEditor($formatter_id, $items);
  if (!isset($editor_id)) {
    return [
      'access' => FALSE,
    ];
  }

  // Gather metadata, allow the editor to add additional metadata of its own.
  $label = $items
    ->getFieldDefinition()
    ->getLabel();
  $editor = $this->editorManager
    ->createInstance($editor_id);
  $metadata = [
    'label' => $label,
    'access' => TRUE,
    'editor' => $editor_id,
  ];
  $custom_metadata = $editor
    ->getMetadata($items);
  if (count($custom_metadata)) {
    $metadata['custom'] = $custom_metadata;
  }
  return $metadata;
}