block_content.install in Drupal 8
Same filename and directory in other branches
Install, update and uninstall functions for the block_content module.
File
core/modules/block_content/block_content.installView 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
Name | Description |
---|---|
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. |