block_content.install

Same filename and directory in other branches
  1. 9 core/modules/block_content/block_content.install
  2. 10 core/modules/block_content/block_content.install
  3. 11.x core/modules/block_content/block_content.install

Install, update and uninstall functions for the block_content module.

File

core/modules/block_content/block_content.install

View source
<?php


/**
 * @file
 * Install, update and uninstall functions for the block_content module.
 */
use Drupal\Core\Field\BaseFieldDefinition;
use Drupal\Core\StringTranslation\TranslatableMarkup;

/**
 * Add 'revision_translation_affected' field to 'block_content' entities.
 */
function block_content_update_8001() {
    // Install the definition that this field had in
    // \Drupal\block_content\Entity\BlockContent::baseFieldDefinitions()
    // at the time that this update function was written. If/when code is
    // deployed that changes that definition, the corresponding module must
    // implement an update function that invokes
    // \Drupal::entityDefinitionUpdateManager()->updateFieldStorageDefinition()
    // with the new definition.
    $storage_definition = BaseFieldDefinition::create('boolean')->setLabel(t('Revision translation affected'))
        ->setDescription(t('Indicates if the last edit of a translation belongs to current revision.'))
        ->setReadOnly(TRUE)
        ->setRevisionable(TRUE)
        ->setTranslatable(TRUE);
    \Drupal::entityDefinitionUpdateManager()->installFieldStorageDefinition('revision_translation_affected', 'block_content', 'block_content', $storage_definition);
}

/**
 * Generalizes the d6_block_content_type and d6_block_content_body_field
 * migrations.
 */
function block_content_update_8002() {
    // Removed in issue #2569605. The Migrate and Migrate Drupal modules are
    // marked experimental and do not need to support the update path until they
    // are stable.
    // @see https://www.drupal.org/node/2569469
}

/**
 * Add 'revision_created' and 'revision_user' fields to 'block_content' entities.
 */
function block_content_update_8003() {
    $revision_created = BaseFieldDefinition::create('created')->setLabel(t('Revision create time'))
        ->setDescription(t('The time that the current revision was created.'))
        ->setRevisionable(TRUE);
    \Drupal::entityDefinitionUpdateManager()->installFieldStorageDefinition('revision_created', 'block_content', 'block_content', $revision_created);
    $revision_user = BaseFieldDefinition::create('entity_reference')->setLabel(t('Revision user'))
        ->setDescription(t('The user ID of the author of the current revision.'))
        ->setSetting('target_type', 'user')
        ->setRevisionable(TRUE);
    \Drupal::entityDefinitionUpdateManager()->installFieldStorageDefinition('revision_user', 'block_content', 'block_content', $revision_user);
}

/**
 * Fix the block_content entity type to specify its revision data table.
 */
function block_content_update_8300() {
    $definition_update_manager = \Drupal::entityDefinitionUpdateManager();
    $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 = $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);
    }
}

/**
 * Add 'reusable' field to 'block_content' entities.
 */
function block_content_update_8600() {
    $reusable = BaseFieldDefinition::create('boolean')->setLabel(t('Reusable'))
        ->setDescription(t('A boolean indicating whether this block is reusable.'))
        ->setTranslatable(FALSE)
        ->setRevisionable(FALSE)
        ->setDefaultValue(TRUE)
        ->setInitialValue(TRUE);
    \Drupal::entityDefinitionUpdateManager()->installFieldStorageDefinition('reusable', 'block_content', 'block_content', $reusable);
}

Functions

Title Deprecated Summary
block_content_update_8001 Add 'revision_translation_affected' field to 'block_content' entities.
block_content_update_8002 Generalizes the d6_block_content_type and d6_block_content_body_field migrations.
block_content_update_8003 Add 'revision_created' and 'revision_user' fields to 'block_content' entities.
block_content_update_8300 Fix the block_content entity type to specify its revision data table.
block_content_update_8400 Add a publishing status field for block_content entities.
block_content_update_8600 Add 'reusable' field to 'block_content' entities.

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