*/
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.
$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);
+ }
}