diff --git a/modules/oe_content_timeline_field/oe_content_timeline_field.install b/modules/oe_content_timeline_field/oe_content_timeline_field.install index e6c583e9e..77a059909 100644 --- a/modules/oe_content_timeline_field/oe_content_timeline_field.install +++ b/modules/oe_content_timeline_field/oe_content_timeline_field.install @@ -7,6 +7,8 @@ declare(strict_types = 1); +use Drupal\Core\Entity\FieldableEntityInterface; + /** * Change timeline "label" column type from "varchar_ascii" to "varchar". */ @@ -17,9 +19,18 @@ function oe_content_timeline_field_update_8101(): void { $key_value = \Drupal::keyValue('entity.storage_schema.sql'); $db = \Drupal::database(); - $timeline_fields = $entity_field_manager->getFieldMapByFieldType('timeline_field'); - foreach ($timeline_fields as $entity_type => $fields) { - foreach (array_keys($fields) as $field_name) { + // Iterate through all fields with type 'timeline_field'. + // Previously this was done with + // $timeline_fields = $entity_field_manager->getFieldMapByFieldType('timeline_field'); + // Unfortunately, this misses field storages with no instances. + foreach (\Drupal::entityTypeManager()->getDefinitions() as $entity_type => $entity_type_definition) { + if (!$entity_type_definition->entityClassImplements(FieldableEntityInterface::class)) { + continue; + } + foreach ($entity_field_manager->getFieldStorageDefinitions($entity_type) as $field_name => $field_storage_definition) { + if ($field_storage_definition->getType() !== 'timeline_field') { + continue; + } $key_name = $entity_type . '.field_schema_data.' . $field_name; $storage_schema = $key_value->get($key_name); $schema_field = $field_name . '_label';