function workspaces_update_8801

Add the 'workspace' revision metadata field on all supported entity types.

File

core/modules/workspaces/workspaces.install, line 128

Code

function workspaces_update_8801() {
    
    /** @var \Drupal\workspaces\WorkspaceManagerInterface $workspace_manager */
    $workspace_manager = \Drupal::service('workspaces.manager');
    $entity_definition_update_manager = \Drupal::entityDefinitionUpdateManager();
    foreach ($entity_definition_update_manager->getEntityTypes() as $entity_type_id => $entity_type) {
        if ($workspace_manager->isEntityTypeSupported($entity_type)) {
            $revision_metadata_keys = $entity_type->get('revision_metadata_keys');
            if (!isset($revision_metadata_keys['workspace'])) {
                $revision_metadata_field_name = 'workspace';
                // Bail out if there's an existing field called 'workspace'.
                if ($entity_definition_update_manager->getFieldStorageDefinition($revision_metadata_field_name, $entity_type_id)) {
                    throw new \RuntimeException("An existing 'workspace' field was found for the '{$entity_type_id}' entity type. Set the 'workspace' revision metadata key to use a different field name and run this update function again.");
                }
                $entity_type->setRevisionMetadataKey('workspace', $revision_metadata_field_name);
                $entity_definition_update_manager->updateEntityType($entity_type);
            }
            else {
                $revision_metadata_field_name = $revision_metadata_keys['workspace'];
            }
            $field_storage = BaseFieldDefinition::create('entity_reference')->setLabel(t('Workspace'))
                ->setDescription(t('Indicates the workspace that this revision belongs to.'))
                ->setSetting('target_type', 'workspace')
                ->setInternal(TRUE)
                ->setTranslatable(FALSE)
                ->setRevisionable(TRUE);
            $entity_definition_update_manager->installFieldStorageDefinition($revision_metadata_field_name, $entity_type_id, 'workspaces', $field_storage);
        }
    }
    return t("The 'workspace' revision metadata field has been installed.");
}

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