From 02694be5c4a7d5d04c0ed07940f7752f1242aefc Mon Sep 17 00:00:00 2001 From: Al Munnings <al.munnings@gmail.com> Date: Sun, 22 Oct 2023 15:21:49 +1100 Subject: [PATCH] Issue #3388494: Enabling metatags submodule generates error "Interface field MetaTagInterface.metatag expected.." --- .../graphql_compose_metatags.module | 23 +++++++++++++++---- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/modules/graphql_compose_metatags/graphql_compose_metatags.module b/modules/graphql_compose_metatags/graphql_compose_metatags.module index 75aefc0d..da18602b 100644 --- a/modules/graphql_compose_metatags/graphql_compose_metatags.module +++ b/modules/graphql_compose_metatags/graphql_compose_metatags.module @@ -7,6 +7,7 @@ declare(strict_types=1); +use Drupal\Core\Entity\EntityFieldManagerInterface; use Drupal\Core\Field\FieldDefinitionInterface; use Drupal\Core\Form\FormStateInterface; use Drupal\graphql_compose\Plugin\GraphQLCompose\GraphQLComposeEntityTypeInterface; @@ -16,15 +17,27 @@ use Drupal\metatag\Form\MetatagDefaultsForm; * Implements hook_graphql_compose_entity_base_fields_alter(). */ function graphql_compose_metatags_graphql_compose_entity_base_fields_alter(array &$fields, string $entity_type_id): void { - static $supported_types; + static $enabled_types; + + if (!isset($enabled_types)) { + $enabled_types = []; + + /** @var EntityFieldManagerInterface $manager */ + $manager = \Drupal::service('entity_field.manager'); - if (!isset($supported_types)) { $supported_types = MetatagDefaultsForm::getSupportedEntityTypes(); + foreach (array_keys($supported_types) as $entity_type_id) { + $base_fields = $manager->getBaseFieldDefinitions($entity_type_id); + + // Check the entity has a meta tag field. + if (array_key_exists('metatag', $base_fields)) { + $enabled_types[$entity_type_id] = $entity_type_id; + } + } } - if (array_key_exists($entity_type_id, $supported_types)) { - // Metatag field on the entity type is not multiple, force multiple. - // 'metatag' field is a computed metatag_computed field type. + // Enable and force multiple. + if (array_key_exists($entity_type_id, $enabled_types)) { $fields['metatag'] = [ 'multiple' => TRUE, ]; -- GitLab