function MetadataGenerator::generateFieldMetadata

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

Overrides MetadataGeneratorInterface::generateFieldMetadata

File

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

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;
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.