Chris@0
|
1 <?php
|
Chris@0
|
2
|
Chris@0
|
3 /**
|
Chris@0
|
4 * @file
|
Chris@0
|
5 * Install, update and uninstall functions for the block_content module.
|
Chris@0
|
6 */
|
Chris@0
|
7
|
Chris@0
|
8 use Drupal\Core\Field\BaseFieldDefinition;
|
Chris@14
|
9 use Drupal\Core\StringTranslation\TranslatableMarkup;
|
Chris@14
|
10
|
Chris@14
|
11 /**
|
Chris@14
|
12 * Implements hook_update_dependencies().
|
Chris@14
|
13 */
|
Chris@14
|
14 function block_content_update_dependencies() {
|
Chris@14
|
15 // The update function that adds the status field must run after
|
Chris@14
|
16 // content_translation_update_8400() which fixes NULL values for the
|
Chris@14
|
17 // 'content_translation_status' field.
|
Chris@14
|
18 if (\Drupal::moduleHandler()->moduleExists('content_translation')) {
|
Chris@14
|
19 $dependencies['block_content'][8400] = [
|
Chris@14
|
20 'content_translation' => 8400,
|
Chris@14
|
21 ];
|
Chris@14
|
22
|
Chris@14
|
23 return $dependencies;
|
Chris@14
|
24 }
|
Chris@14
|
25 }
|
Chris@0
|
26
|
Chris@0
|
27 /**
|
Chris@0
|
28 * Add 'revision_translation_affected' field to 'block_content' entities.
|
Chris@0
|
29 */
|
Chris@0
|
30 function block_content_update_8001() {
|
Chris@0
|
31 // Install the definition that this field had in
|
Chris@0
|
32 // \Drupal\block_content\Entity\BlockContent::baseFieldDefinitions()
|
Chris@0
|
33 // at the time that this update function was written. If/when code is
|
Chris@0
|
34 // deployed that changes that definition, the corresponding module must
|
Chris@0
|
35 // implement an update function that invokes
|
Chris@0
|
36 // \Drupal::entityDefinitionUpdateManager()->updateFieldStorageDefinition()
|
Chris@0
|
37 // with the new definition.
|
Chris@0
|
38 $storage_definition = BaseFieldDefinition::create('boolean')
|
Chris@0
|
39 ->setLabel(t('Revision translation affected'))
|
Chris@0
|
40 ->setDescription(t('Indicates if the last edit of a translation belongs to current revision.'))
|
Chris@0
|
41 ->setReadOnly(TRUE)
|
Chris@0
|
42 ->setRevisionable(TRUE)
|
Chris@0
|
43 ->setTranslatable(TRUE);
|
Chris@0
|
44
|
Chris@0
|
45 \Drupal::entityDefinitionUpdateManager()
|
Chris@0
|
46 ->installFieldStorageDefinition('revision_translation_affected', 'block_content', 'block_content', $storage_definition);
|
Chris@0
|
47 }
|
Chris@0
|
48
|
Chris@0
|
49 /**
|
Chris@0
|
50 * Generalizes the d6_block_content_type and d6_block_content_body_field
|
Chris@0
|
51 * migrations.
|
Chris@0
|
52 */
|
Chris@0
|
53 function block_content_update_8002() {
|
Chris@0
|
54 // Removed in issue #2569605. The Migrate and Migrate Drupal modules are
|
Chris@0
|
55 // marked experimental and do not need to support the update path until they
|
Chris@0
|
56 // are stable.
|
Chris@0
|
57 // @see https://www.drupal.org/node/2569469
|
Chris@0
|
58 }
|
Chris@0
|
59
|
Chris@0
|
60 /**
|
Chris@0
|
61 * Add 'revision_created' and 'revision_user' fields to 'block_content' entities.
|
Chris@0
|
62 */
|
Chris@0
|
63 function block_content_update_8003() {
|
Chris@0
|
64 $revision_created = BaseFieldDefinition::create('created')
|
Chris@0
|
65 ->setLabel(t('Revision create time'))
|
Chris@0
|
66 ->setDescription(t('The time that the current revision was created.'))
|
Chris@0
|
67 ->setRevisionable(TRUE);
|
Chris@0
|
68
|
Chris@0
|
69 \Drupal::entityDefinitionUpdateManager()
|
Chris@0
|
70 ->installFieldStorageDefinition('revision_created', 'block_content', 'block_content', $revision_created);
|
Chris@0
|
71
|
Chris@0
|
72 $revision_user = BaseFieldDefinition::create('entity_reference')
|
Chris@0
|
73 ->setLabel(t('Revision user'))
|
Chris@0
|
74 ->setDescription(t('The user ID of the author of the current revision.'))
|
Chris@0
|
75 ->setSetting('target_type', 'user')
|
Chris@0
|
76 ->setRevisionable(TRUE);
|
Chris@0
|
77
|
Chris@0
|
78 \Drupal::entityDefinitionUpdateManager()
|
Chris@0
|
79 ->installFieldStorageDefinition('revision_user', 'block_content', 'block_content', $revision_user);
|
Chris@0
|
80 }
|
Chris@0
|
81
|
Chris@0
|
82 /**
|
Chris@0
|
83 * Fix the block_content entity type to specify its revision data table.
|
Chris@0
|
84 */
|
Chris@0
|
85 function block_content_update_8300() {
|
Chris@0
|
86 $definition_update_manager = \Drupal::entityDefinitionUpdateManager();
|
Chris@0
|
87 $entity_type = $definition_update_manager->getEntityType('block_content');
|
Chris@0
|
88 $entity_type->set('revision_data_table', 'block_content_field_revision');
|
Chris@0
|
89 $definition_update_manager->updateEntityType($entity_type);
|
Chris@14
|
90 }
|
Chris@0
|
91
|
Chris@14
|
92 /**
|
Chris@14
|
93 * Add a publishing status field for block_content entities.
|
Chris@14
|
94 */
|
Chris@14
|
95 function block_content_update_8400() {
|
Chris@14
|
96 $definition_update_manager = \Drupal::entityDefinitionUpdateManager();
|
Chris@14
|
97
|
Chris@14
|
98 // Add the published entity key to the block_content entity type.
|
Chris@14
|
99 $entity_type = $definition_update_manager->getEntityType('block_content');
|
Chris@14
|
100 $entity_keys = $entity_type->getKeys();
|
Chris@14
|
101 $entity_keys['published'] = 'status';
|
Chris@14
|
102 $entity_type->set('entity_keys', $entity_keys);
|
Chris@14
|
103 $definition_update_manager->updateEntityType($entity_type);
|
Chris@14
|
104
|
Chris@14
|
105 // Add the publishing status field to the block_content entity type.
|
Chris@14
|
106 $status = BaseFieldDefinition::create('boolean')
|
Chris@14
|
107 ->setLabel(new TranslatableMarkup('Publishing status'))
|
Chris@14
|
108 ->setDescription(new TranslatableMarkup('A boolean indicating the published state.'))
|
Chris@14
|
109 ->setRevisionable(TRUE)
|
Chris@14
|
110 ->setTranslatable(TRUE)
|
Chris@14
|
111 ->setDefaultValue(TRUE);
|
Chris@14
|
112
|
Chris@14
|
113 $has_content_translation_status_field = \Drupal::moduleHandler()->moduleExists('content_translation') && $definition_update_manager->getFieldStorageDefinition('content_translation_status', 'block_content');
|
Chris@14
|
114 if ($has_content_translation_status_field) {
|
Chris@14
|
115 $status->setInitialValueFromField('content_translation_status');
|
Chris@14
|
116 }
|
Chris@14
|
117 else {
|
Chris@14
|
118 $status->setInitialValue(TRUE);
|
Chris@14
|
119 }
|
Chris@14
|
120 $definition_update_manager->installFieldStorageDefinition('status', 'block_content', 'block_content', $status);
|
Chris@14
|
121
|
Chris@14
|
122 // Uninstall the 'content_translation_status' field if needed.
|
Chris@14
|
123 $database = \Drupal::database();
|
Chris@14
|
124 if ($has_content_translation_status_field) {
|
Chris@14
|
125 // First we have to remove the field data.
|
Chris@14
|
126 $database->update($entity_type->getDataTable())
|
Chris@14
|
127 ->fields(['content_translation_status' => NULL])
|
Chris@14
|
128 ->execute();
|
Chris@14
|
129
|
Chris@14
|
130 // A site may have disabled revisionability for this entity type.
|
Chris@14
|
131 if ($entity_type->isRevisionable()) {
|
Chris@14
|
132 $database->update($entity_type->getRevisionDataTable())
|
Chris@14
|
133 ->fields(['content_translation_status' => NULL])
|
Chris@14
|
134 ->execute();
|
Chris@14
|
135 }
|
Chris@14
|
136
|
Chris@14
|
137 $content_translation_status = $definition_update_manager->getFieldStorageDefinition('content_translation_status', 'block_content');
|
Chris@14
|
138 $definition_update_manager->uninstallFieldStorageDefinition($content_translation_status);
|
Chris@14
|
139 }
|
Chris@0
|
140 }
|