You are here

function system_update_8402 in Drupal 8

Add the 'revision_translation_affected' field to all entity types.

File

core/modules/system/system.install, line 2400
Install, update and uninstall functions for the system module.

Code

function system_update_8402() {
  $definition_update_manager = \Drupal::entityDefinitionUpdateManager();

  // Clear the cached entity type definitions so we get the new
  // 'revision_translation_affected' entity key.
  \Drupal::entityTypeManager()
    ->clearCachedDefinitions();

  // Get a list of revisionable and translatable entity types.

  /** @var \Drupal\Core\Entity\ContentEntityTypeInterface[] $definitions */
  $definitions = array_filter(\Drupal::entityTypeManager()
    ->getDefinitions(), function (EntityTypeInterface $entity_type) use ($definition_update_manager) {
    if ($entity_type = $definition_update_manager
      ->getEntityType($entity_type
      ->id())) {
      return $entity_type
        ->isRevisionable() && $entity_type
        ->isTranslatable();
    }
    return FALSE;
  });
  foreach ($definitions as $entity_type_id => $entity_type) {
    $field_name = $entity_type
      ->getKey('revision_translation_affected');

    // Install the 'revision_translation_affected' field if needed.
    if (!$definition_update_manager
      ->getFieldStorageDefinition($field_name, $entity_type_id)) {
      $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)
        ->setInitialValue(TRUE);
      $definition_update_manager
        ->installFieldStorageDefinition($field_name, $entity_type_id, $entity_type_id, $storage_definition);
    }
  }
}