accessChecker = $access_checker; $this->editorSelector = $editor_selector; $this->editorManager = $editor_manager; } /** * {@inheritdoc} */ public function generateEntityMetadata(EntityInterface $entity) { return [ 'label' => $entity->label(), ]; } /** * {@inheritdoc} */ 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) { 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; } }