function block_content_update_8400 in Drupal 8
Add a publishing status field for block_content entities.
File
- core/
modules/ block_content/ block_content.install, line 79 - Install, update and uninstall functions for the block_content module.
Code
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 = $definition_update_manager
->getFieldStorageDefinition('content_translation_status', 'block_content');
if ($has_content_translation_status_field) {
$status
->setInitialValueFromField('content_translation_status', TRUE);
}
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);
}
}