annotate core/modules/block_content/block_content.install @ 14:1fec387a4317

Update Drupal core to 8.5.2 via Composer
author Chris Cannam
date Mon, 23 Apr 2018 09:46:53 +0100
parents 4c8ae668cc8c
children c2387f117808
rev   line source
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 }