X-Git-Url: http://aleph1.co.uk/gitweb/?a=blobdiff_plain;f=web%2Fcore%2Fmodules%2Fcontent_translation%2Fcontent_translation.install;h=bc948e1a3aea5a75f1c8a0baebb3060f33b81cd4;hb=9424afc6c1f518c301bf87a23c047d1873435d05;hp=dc12d9f3fcf9bc790580072a70dd51a7912fb2f4;hpb=a2bd1bf0c2c1f1a17d188f4dc0726a45494cefae;p=yaffs-website diff --git a/web/core/modules/content_translation/content_translation.install b/web/core/modules/content_translation/content_translation.install index dc12d9f3f..bc948e1a3 100644 --- a/web/core/modules/content_translation/content_translation.install +++ b/web/core/modules/content_translation/content_translation.install @@ -5,7 +5,9 @@ * Installation functions for Content Translation module. */ -use \Drupal\Core\Url; +use Drupal\Core\Entity\Sql\SqlEntityStorageInterface; +use Drupal\Core\Language\LanguageInterface; +use Drupal\Core\Url; /** * Implements hook_install(). @@ -18,17 +20,17 @@ function content_translation_install() { // Translation works when at least two languages are added. if (count(\Drupal::languageManager()->getLanguages()) < 2) { $t_args = [ - ':language_url' => Url::fromRoute('entity.configurable_language.collection')->toString() + ':language_url' => Url::fromRoute('entity.configurable_language.collection')->toString(), ]; $message = t('This site has only a single language enabled. Add at least one more language in order to translate content.', $t_args); - drupal_set_message($message, 'warning'); + \Drupal::messenger()->addWarning($message); } // Point the user to the content translation settings. $t_args = [ - ':settings_url' => Url::fromRoute('language.content_settings_page')->toString() + ':settings_url' => Url::fromRoute('language.content_settings_page')->toString(), ]; $message = t('Enable translation for content types, taxonomy vocabularies, accounts, or any other element you wish to translate.', $t_args); - drupal_set_message($message, 'warning'); + \Drupal::messenger()->addWarning($message); } /** @@ -44,3 +46,58 @@ function content_translation_update_8001() { function content_translation_update_8002() { \Drupal::service('plugin.manager.field.field_type')->clearCachedDefinitions(); } + +/** + * Fix the initial values for content translation metadata fields. + */ +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(); + } + } + } + } +}