Chris@0: getLanguages()) < 2) { Chris@0: $t_args = [ Chris@17: ':language_url' => Url::fromRoute('entity.configurable_language.collection')->toString(), Chris@0: ]; Chris@0: $message = t('This site has only a single language enabled. Add at least one more language in order to translate content.', $t_args); Chris@17: \Drupal::messenger()->addWarning($message); Chris@0: } Chris@0: // Point the user to the content translation settings. Chris@0: $t_args = [ Chris@17: ':settings_url' => Url::fromRoute('language.content_settings_page')->toString(), Chris@0: ]; Chris@0: $message = t('Enable translation for content types, taxonomy vocabularies, accounts, or any other element you wish to translate.', $t_args); Chris@17: \Drupal::messenger()->addWarning($message); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Rebuild the routes as the content translation routes have now new names. Chris@0: */ Chris@0: function content_translation_update_8001() { Chris@0: \Drupal::service('router.builder')->rebuild(); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Clear field type plugin caches to fix image field translatability. Chris@0: */ Chris@0: function content_translation_update_8002() { Chris@0: \Drupal::service('plugin.manager.field.field_type')->clearCachedDefinitions(); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Fix the initial values for content translation metadata fields. Chris@0: */ Chris@0: function content_translation_update_8400() { Chris@0: $database = \Drupal::database(); Chris@0: /** @var \Drupal\content_translation\ContentTranslationManagerInterface $content_translation_manager */ Chris@0: $content_translation_manager = \Drupal::service('content_translation.manager'); Chris@0: /** @var \Drupal\Core\Entity\EntityLastInstalledSchemaRepositoryInterface $last_installed_schema_repository */ Chris@0: $last_installed_schema_repository = \Drupal::service('entity.last_installed_schema.repository'); Chris@0: $entity_type_manager = \Drupal::entityTypeManager(); Chris@0: $entity_definition_update_manager = \Drupal::entityDefinitionUpdateManager(); Chris@0: Chris@14: $entity_type_manager->clearCachedDefinitions(); Chris@0: foreach ($content_translation_manager->getSupportedEntityTypes() as $entity_type_id => $entity_type_definition) { Chris@0: $storage = $entity_type_manager->getStorage($entity_type_id); Chris@0: if ($storage instanceof SqlEntityStorageInterface) { Chris@0: $entity_type = $entity_definition_update_manager->getEntityType($entity_type_id); Chris@0: $storage_definitions = $last_installed_schema_repository->getLastInstalledFieldStorageDefinitions($entity_type_id); Chris@0: Chris@0: // Since the entity type is managed by Content Translation, we can assume Chris@0: // that it is translatable, so we use the data and revision data tables. Chris@0: $tables_to_update = [$entity_type->getDataTable()]; Chris@0: if ($entity_type->isRevisionable()) { Chris@0: $tables_to_update += [$entity_type->getRevisionDataTable()]; Chris@0: } Chris@0: Chris@0: foreach ($tables_to_update as $table_name) { Chris@0: // Fix the values of the 'content_translation_source' field. Chris@0: if (isset($storage_definitions['content_translation_source'])) { Chris@0: $database->update($table_name) Chris@0: ->fields(['content_translation_source' => LanguageInterface::LANGCODE_NOT_SPECIFIED]) Chris@0: ->isNull('content_translation_source') Chris@0: ->execute(); Chris@0: } Chris@0: Chris@0: // Fix the values of the 'content_translation_outdated' field. Chris@0: if (isset($storage_definitions['content_translation_outdated'])) { Chris@0: $database->update($table_name) Chris@0: ->fields(['content_translation_outdated' => 0]) Chris@0: ->isNull('content_translation_outdated') Chris@0: ->execute(); Chris@0: } Chris@0: Chris@0: // Fix the values of the 'content_translation_status' field. Chris@0: if (isset($storage_definitions['content_translation_status'])) { Chris@0: $database->update($table_name) Chris@0: ->fields(['content_translation_status' => 1]) Chris@0: ->isNull('content_translation_status') Chris@0: ->execute(); Chris@0: } Chris@0: } Chris@0: } Chris@0: } Chris@0: }