function block_content_update_8400

Add a publishing status field for block_content entities.

File

core/modules/block_content/block_content.install, line 79

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);
    }
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.