From 051f8e910a6f096eb13a53c82579af0968910a4d Mon Sep 17 00:00:00 2001 From: Rosie Le Faive Date: Mon, 24 Nov 2025 17:11:24 -0400 Subject: [PATCH] Make links and bundle formatter work for node, media, vocabulary. --- src/Controller/MetadataProfileController.php | 51 +++++++++++++------- 1 file changed, 34 insertions(+), 17 deletions(-) diff --git a/src/Controller/MetadataProfileController.php b/src/Controller/MetadataProfileController.php index 6e41049..2fedcf1 100644 --- a/src/Controller/MetadataProfileController.php +++ b/src/Controller/MetadataProfileController.php @@ -53,6 +53,7 @@ class MetadataProfileController extends ControllerBase { */ protected $entityTypeBundleOf; + public function __construct(EntityFieldManagerInterface $entity_field_manager, FieldTypePluginManagerInterface $field_type_plugin_manager, ConfigFactoryInterface $config_factory, @@ -89,11 +90,11 @@ class MetadataProfileController extends ControllerBase { $content_type = $this->entityBundle; } // Get core content type information. - $node_type = $this->config('node.type.' . $content_type); - if (!$node_type) { + $bundle_config = $this->config(str_replace('_', '.', $this->entityType) . '.' . $content_type); + if (!$bundle_config) { return ['#markup'=> 'Not a valid content type.']; } - $build = $this->format_bundle($node_type); + $build = $this->format_bundle($bundle_config); $metadata_profile = $this->getMetadataProfile($content_type); @@ -108,7 +109,7 @@ class MetadataProfileController extends ControllerBase { '#weight' => '9', ]; // Get field information. - $field_definitions = $this->entityFieldManager->getFieldDefinitions('node', $content_type); + $field_definitions = $this->entityFieldManager->getFieldDefinitions($this->entityTypeBundleOf, $content_type); foreach ($field_definitions as $field_name => $field_definition) { $build['fields'][$field_name] = $this->display_field($field_name, $field_definition, $metadata_profile[$field_name]); } @@ -120,22 +121,38 @@ class MetadataProfileController extends ControllerBase { * Format information about a bundle. */ protected function format_bundle(Config $bundle) { + if (str_starts_with($bundle->getName(), 'node.type')) { + $label = $bundle->get('name'); + $machine_name = $bundle->get('type'); + $description = $bundle->get('description'); + } + elseif (str_starts_with($bundle->getName(), 'taxonomy.vocabulary')) { + $label = $bundle->get('name'); + $machine_name = $bundle->get('vid'); + $description = $bundle->get('description'); + } + elseif (str_starts_with($bundle->getName(), 'media.type')) { + $label = $bundle->get('label'); + $machine_name = $bundle->get('id'); + $description = $bundle->get('description'); + } + $build = [ '#type' => 'container', '#attached' => ['library' => ['metadata_profile/metadata_profile']], 'title' => [ - '#plain_text' => $bundle->get('name'), + '#plain_text' => $label, '#prefix' => '

', '#suffix' => '

', ], 'machine_name' => [ - '#plain_text' => $bundle->get('type'), - '#prefix' => ' (', - '#suffix' => ')', + '#plain_text' => $machine_name, + '#prefix' => ' (', + '#suffix' => ')', ], 'description' => [ - '#plain_text' => $bundle->get('description'), + '#plain_text' => $description, '#prefix' => '

', '#suffix' => '

', ], @@ -176,7 +193,7 @@ class MetadataProfileController extends ControllerBase { // * 'block_visible' $metadata_profile = []; - $field_definitions = $this->entityFieldManager->getFieldDefinitions('node', $bundle); + $field_definitions = $this->entityFieldManager->getFieldDefinitions($this->entityTypeBundleOf, $bundle); foreach ($field_definitions as $field_name => $field_definition) { $metadata_profile[$field_name] = [ 'label' => $field_definition->getLabel(), @@ -199,7 +216,7 @@ class MetadataProfileController extends ControllerBase { protected function buildSummaryTable($metadata_profile) { $rows = []; foreach ($metadata_profile as $field_name => $field_profile) { - if (str_starts_with( $field_name, 'field_') or $field_name == 'title') { + if (str_starts_with( $field_name, 'field_') or in_array($field_name, ['title', 'name'])) { $rows[] = [ $field_profile['details_link'], $field_profile['machine_name'], @@ -231,7 +248,7 @@ class MetadataProfileController extends ControllerBase { protected function display_field(string $field_name, FieldDefinitionInterface $field_definition, array $field_profile) { $render_array = []; - if (str_starts_with($field_name, 'field_') or $field_name == 'title') { + if (str_starts_with($field_name, 'field_') or in_array($field_name, ['title', 'name'])) { $render_array = [ '#type' => 'container', '#attributes' => ['class' => ['field-info']], @@ -271,8 +288,8 @@ class MetadataProfileController extends ControllerBase { if ($field_definition->getFieldStorageDefinition() instanceof BaseFieldDefinition) { if ($this->moduleHandler()->moduleExists('base_field_override_ui')) { if (method_exists($field_definition, 'id')) { - $edit_url = Url::fromRoute('entity.base_field_override.node_base_field_override_edit_form', [ - 'node_type' => $field_definition->getTargetBundle(), + $edit_url = Url::fromRoute('entity.base_field_override.' . $this->entityTypeBundleOf . '_base_field_override_edit_form', [ + $this->entityType => $field_definition->getTargetBundle(), 'base_field_override' => $field_definition->id(), 'destination' => $redirect_url->toString() ]); @@ -287,8 +304,8 @@ class MetadataProfileController extends ControllerBase { } } else { - $edit_url = Url::fromRoute('entity.field_config.node_field_edit_form', [ - 'node_type' => $field_definition->getTargetBundle(), + $edit_url = Url::fromRoute('entity.field_config.' . $this->entityTypeBundleOf . '_field_edit_form', [ + $this->entityType => $field_definition->getTargetBundle(), 'field_config' => $field_definition->id(), 'destination' => $redirect_url->toString(), ]); @@ -425,7 +442,7 @@ class MetadataProfileController extends ControllerBase { $storage = $field_definition->getFieldStorageDefinition(); if ($storage instanceof BaseFieldDefinition) { // Use property_path to find related fields. - $field_id = 'node.' . $storage->getName(); + $field_id = $this->entityTypeBundleOf . '.' . $storage->getName(); } else { $field_id = 'field.storage.' . $storage->get('id');