0a4ed4fa1289c78f9a6be3a08b97f3a4b7acbcbf
[yaffs-website] / web / core / modules / system / tests / modules / entity_test_update / update / entity_rev_pub_updates_8400.inc
1 <?php
2
3 /**
4  * @file
5  * Defines the 8400 db update for the "entity_rev_pub_updates" group.
6  */
7
8 use Drupal\Core\Field\BaseFieldDefinition;
9
10 /**
11  * Implements hook_update_dependencies().
12  */
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,
19   ];
20
21   return $dependencies;
22 }
23
24 /**
25  * Add the 'published' and revisionable metadata fields to entity_test_update.
26  */
27 function entity_test_update_update_8400() {
28   $definition_update_manager = \Drupal::entityDefinitionUpdateManager();
29
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');
33
34   $entity_keys = $entity_type->getKeys();
35   $entity_keys['published'] = 'status';
36   $entity_type->set('entity_keys', $entity_keys);
37
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',
43   ];
44   $entity_type->set('revision_metadata_keys', $revision_metadata_keys);
45
46   $definition_update_manager->updateEntityType($entity_type);
47
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);
55
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');
59   }
60   else {
61     $status->setInitialValue(TRUE);
62   }
63   $definition_update_manager->installFieldStorageDefinition('status', 'entity_test_update', 'entity_test_update', $status);
64
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);
71
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);
78
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)
83     ->setDefaultValue('')
84     ->setDisplayOptions('form', [
85       'type' => 'string_textarea',
86       'weight' => 25,
87       'settings' => [
88         'rows' => 4,
89       ],
90     ]);
91   $definition_update_manager->installFieldStorageDefinition('revision_log_message', 'entity_test_update', 'entity_test_update', $revision_log_message);
92
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])
99       ->execute();
100
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])
105         ->execute();
106     }
107
108     $content_translation_status = $definition_update_manager->getFieldStorageDefinition('content_translation_status', 'entity_test_update');
109     $definition_update_manager->uninstallFieldStorageDefinition($content_translation_status);
110   }
111 }