function content_translation_update_8400

Fix the initial values for content translation metadata fields.

File

core/modules/content_translation/content_translation.install, line 60

Code

function content_translation_update_8400() {
    $database = \Drupal::database();
    
    /** @var \Drupal\content_translation\ContentTranslationManagerInterface $content_translation_manager */
    $content_translation_manager = \Drupal::service('content_translation.manager');
    
    /** @var \Drupal\Core\Entity\EntityLastInstalledSchemaRepositoryInterface $last_installed_schema_repository */
    $last_installed_schema_repository = \Drupal::service('entity.last_installed_schema.repository');
    $entity_type_manager = \Drupal::entityTypeManager();
    $entity_definition_update_manager = \Drupal::entityDefinitionUpdateManager();
    $entity_type_manager->clearCachedDefinitions();
    foreach ($content_translation_manager->getSupportedEntityTypes() as $entity_type_id => $entity_type_definition) {
        $storage = $entity_type_manager->getStorage($entity_type_id);
        if ($storage instanceof SqlEntityStorageInterface) {
            $entity_type = $entity_definition_update_manager->getEntityType($entity_type_id);
            $storage_definitions = $last_installed_schema_repository->getLastInstalledFieldStorageDefinitions($entity_type_id);
            // Since the entity type is managed by Content Translation, we can assume
            // that it is translatable, so we use the data and revision data tables.
            $tables_to_update = [
                $entity_type->getDataTable(),
            ];
            if ($entity_type->isRevisionable()) {
                $tables_to_update += [
                    $entity_type->getRevisionDataTable(),
                ];
            }
            foreach ($tables_to_update as $table_name) {
                // Fix the values of the 'content_translation_source' field.
                if (isset($storage_definitions['content_translation_source'])) {
                    $database->update($table_name)
                        ->fields([
                        'content_translation_source' => LanguageInterface::LANGCODE_NOT_SPECIFIED,
                    ])
                        ->isNull('content_translation_source')
                        ->execute();
                }
                // Fix the values of the 'content_translation_outdated' field.
                if (isset($storage_definitions['content_translation_outdated'])) {
                    $database->update($table_name)
                        ->fields([
                        'content_translation_outdated' => 0,
                    ])
                        ->isNull('content_translation_outdated')
                        ->execute();
                }
                // Fix the values of the 'content_translation_status' field.
                if (isset($storage_definitions['content_translation_status'])) {
                    $database->update($table_name)
                        ->fields([
                        'content_translation_status' => 1,
                    ])
                        ->isNull('content_translation_status')
                        ->execute();
                }
            }
        }
    }
}

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