5 * Defines the 8400 db update for the "entity_rev_pub_updates" group.
8 use Drupal\Core\Field\BaseFieldDefinition;
11 * Implements hook_update_dependencies().
13 function entity_test_update_update_dependencies() {
14 // The update function that adds the status field must run after
15 // content_translation_update_8400() which fixes NULL values for the
16 // 'content_translation_status' field.
17 $dependencies['entity_test_update'][8400] = [
18 'content_translation' => 8400,
25 * Add the 'published' and revisionable metadata fields to entity_test_update.
27 function entity_test_update_update_8400() {
28 $definition_update_manager = \Drupal::entityDefinitionUpdateManager();
30 // Add the published entity key and revisionable metadata fields to the
31 // entity_test_update entity type.
32 $entity_type = $definition_update_manager->getEntityType('entity_test_update');
34 $entity_keys = $entity_type->getKeys();
35 $entity_keys['published'] = 'status';
36 $entity_type->set('entity_keys', $entity_keys);
38 $revision_metadata_keys = [
39 'revision_user' => 'revision_user',
40 'revision_created' => 'revision_created',
41 'revision_log_message' => 'revision_log_message',
42 'revision_default' => 'revision_default',
44 $entity_type->set('revision_metadata_keys', $revision_metadata_keys);
46 $definition_update_manager->updateEntityType($entity_type);
48 // Add the status field.
49 $status = BaseFieldDefinition::create('boolean')
50 ->setLabel(t('Publishing status'))
51 ->setDescription(t('A boolean indicating the published state.'))
52 ->setRevisionable(TRUE)
53 ->setTranslatable(TRUE)
54 ->setDefaultValue(TRUE);
56 $has_content_translation_status_field = \Drupal::moduleHandler()->moduleExists('content_translation') && $definition_update_manager->getFieldStorageDefinition('content_translation_status', 'entity_test_update');
57 if ($has_content_translation_status_field) {
58 $status->setInitialValueFromField('content_translation_status');
61 $status->setInitialValue(TRUE);
63 $definition_update_manager->installFieldStorageDefinition('status', 'entity_test_update', 'entity_test_update', $status);
65 // Add the revision metadata fields.
66 $revision_created = BaseFieldDefinition::create('created')
67 ->setLabel(t('Revision create time'))
68 ->setDescription(t('The time that the current revision was created.'))
69 ->setRevisionable(TRUE);
70 $definition_update_manager->installFieldStorageDefinition('revision_created', 'entity_test_update', 'entity_test_update', $revision_created);
72 $revision_user = BaseFieldDefinition::create('entity_reference')
73 ->setLabel(t('Revision user'))
74 ->setDescription(t('The user ID of the author of the current revision.'))
75 ->setSetting('target_type', 'user')
76 ->setRevisionable(TRUE);
77 $definition_update_manager->installFieldStorageDefinition('revision_user', 'entity_test_update', 'entity_test_update', $revision_user);
79 $revision_log_message = BaseFieldDefinition::create('string_long')
80 ->setLabel(t('Revision log message'))
81 ->setDescription(t('Briefly describe the changes you have made.'))
82 ->setRevisionable(TRUE)
84 ->setDisplayOptions('form', [
85 'type' => 'string_textarea',
91 $definition_update_manager->installFieldStorageDefinition('revision_log_message', 'entity_test_update', 'entity_test_update', $revision_log_message);
93 // Uninstall the 'content_translation_status' field if needed.
94 $database = \Drupal::database();
95 if ($has_content_translation_status_field) {
96 // First we have to remove the field data.
97 $database->update($entity_type->getDataTable())
98 ->fields(['content_translation_status' => NULL])
101 // A site may have disabled revisionability for this entity type.
102 if ($entity_type->isRevisionable()) {
103 $database->update($entity_type->getRevisionDataTable())
104 ->fields(['content_translation_status' => NULL])
108 $content_translation_status = $definition_update_manager->getFieldStorageDefinition('content_translation_status', 'entity_test_update');
109 $definition_update_manager->uninstallFieldStorageDefinition($content_translation_status);