Mercurial > hg > isophonics-drupal-site
diff 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 |
line wrap: on
line diff
--- a/core/modules/block_content/block_content.install Mon Apr 23 09:33:26 2018 +0100 +++ b/core/modules/block_content/block_content.install Mon Apr 23 09:46:53 2018 +0100 @@ -6,6 +6,23 @@ */ use Drupal\Core\Field\BaseFieldDefinition; +use Drupal\Core\StringTranslation\TranslatableMarkup; + +/** + * Implements hook_update_dependencies(). + */ +function block_content_update_dependencies() { + // The update function that adds the status field must run after + // content_translation_update_8400() which fixes NULL values for the + // 'content_translation_status' field. + if (\Drupal::moduleHandler()->moduleExists('content_translation')) { + $dependencies['block_content'][8400] = [ + 'content_translation' => 8400, + ]; + + return $dependencies; + } +} /** * Add 'revision_translation_affected' field to 'block_content' entities. @@ -70,5 +87,54 @@ $entity_type = $definition_update_manager->getEntityType('block_content'); $entity_type->set('revision_data_table', 'block_content_field_revision'); $definition_update_manager->updateEntityType($entity_type); +} +/** + * Add a publishing status field for block_content entities. + */ +function block_content_update_8400() { + $definition_update_manager = \Drupal::entityDefinitionUpdateManager(); + + // Add the published entity key to the block_content entity type. + $entity_type = $definition_update_manager->getEntityType('block_content'); + $entity_keys = $entity_type->getKeys(); + $entity_keys['published'] = 'status'; + $entity_type->set('entity_keys', $entity_keys); + $definition_update_manager->updateEntityType($entity_type); + + // Add the publishing status field to the block_content entity type. + $status = BaseFieldDefinition::create('boolean') + ->setLabel(new TranslatableMarkup('Publishing status')) + ->setDescription(new TranslatableMarkup('A boolean indicating the published state.')) + ->setRevisionable(TRUE) + ->setTranslatable(TRUE) + ->setDefaultValue(TRUE); + + $has_content_translation_status_field = \Drupal::moduleHandler()->moduleExists('content_translation') && $definition_update_manager->getFieldStorageDefinition('content_translation_status', 'block_content'); + if ($has_content_translation_status_field) { + $status->setInitialValueFromField('content_translation_status'); + } + else { + $status->setInitialValue(TRUE); + } + $definition_update_manager->installFieldStorageDefinition('status', 'block_content', 'block_content', $status); + + // Uninstall the 'content_translation_status' field if needed. + $database = \Drupal::database(); + if ($has_content_translation_status_field) { + // First we have to remove the field data. + $database->update($entity_type->getDataTable()) + ->fields(['content_translation_status' => NULL]) + ->execute(); + + // A site may have disabled revisionability for this entity type. + if ($entity_type->isRevisionable()) { + $database->update($entity_type->getRevisionDataTable()) + ->fields(['content_translation_status' => NULL]) + ->execute(); + } + + $content_translation_status = $definition_update_manager->getFieldStorageDefinition('content_translation_status', 'block_content'); + $definition_update_manager->uninstallFieldStorageDefinition($content_translation_status); + } }