diff --git a/core/modules/content_translation/content_translation.module b/core/modules/content_translation/content_translation.module index 0ab227b789..a165471211 100644 --- a/core/modules/content_translation/content_translation.module +++ b/core/modules/content_translation/content_translation.module @@ -16,6 +16,7 @@ use Drupal\Core\Language\LanguageInterface; use Drupal\Core\Routing\RouteMatchInterface; use Drupal\Core\StringTranslation\TranslatableMarkup; +use Drupal\language\ContentLanguageSettingsInterface; /** * Implements hook_help(). @@ -213,6 +214,63 @@ function content_translation_entity_base_field_info(EntityTypeInterface $entity_ } } +/** + * Implements hook_ENTITY_TYPE_insert() for language content settings. + */ +function content_translation_language_content_settings_insert(ContentLanguageSettingsInterface $settings) { + // @see \Drupal\content_translation\ContentTranslationManager::isEnabled() + if ($settings->getThirdPartySetting('content_translation', 'enabled', FALSE)) { + /** @var \Drupal\Core\Entity\EntityFieldManagerInterface $field_manager */ + $field_manager = \Drupal::service('entity_field.manager'); + /** @var \Drupal\Core\Entity\EntityLastInstalledSchemaRepositoryInterface $schema_repository */ + $schema_repository = \Drupal::service('entity.last_installed_schema.repository'); + $definition_update_manager = \Drupal::entityDefinitionUpdateManager(); + $entity_type_id = $settings->getTargetEntityTypeId(); + + $field_manager->useCaches(FALSE); + $storage_definitions = $field_manager->getFieldStorageDefinitions($entity_type_id); + $field_manager->useCaches(TRUE); + $installed_storage_definitions = $schema_repository->getLastInstalledFieldStorageDefinitions($entity_type_id); + + foreach (array_diff_key($storage_definitions, $installed_storage_definitions) as $storage_definition) { + /** @var $storage_definition \Drupal\Core\Field\FieldStorageDefinitionInterface */ + if ($storage_definition->getProvider() == 'content_translation') { + $definition_update_manager->installFieldStorageDefinition($storage_definition->getName(), $entity_type_id, 'content_translation', $storage_definition); + } + } + } +} + +/** + * Implements hook_ENTITY_TYPE_update() for language content settings. + */ +function content_translation_language_content_settings_update(ContentLanguageSettingsInterface $settings) { + /** @var \Drupal\language\ContentLanguageSettingsInterface $original_settings */ + $original_settings = $settings->original; + // @see \Drupal\content_translation\ContentTranslationManager::isEnabled() + if ($settings->getThirdPartySetting('content_translation', 'enabled', FALSE) + && !$original_settings->getThirdPartySetting('content_translation', 'enabled', FALSE) + ) { + /** @var \Drupal\Core\Entity\EntityFieldManagerInterface $field_manager */ + $field_manager = \Drupal::service('entity_field.manager'); + /** @var \Drupal\Core\Entity\EntityLastInstalledSchemaRepositoryInterface $schema_repository */ + $schema_repository = \Drupal::service('entity.last_installed_schema.repository'); + $definition_update_manager = \Drupal::entityDefinitionUpdateManager(); + $entity_type_id = $settings->getTargetEntityTypeId(); + + $field_manager->useCaches(FALSE); + $storage_definitions = $field_manager->getFieldStorageDefinitions($entity_type_id); + $field_manager->useCaches(TRUE); + $installed_storage_definitions = $schema_repository->getLastInstalledFieldStorageDefinitions($entity_type_id); + foreach (array_diff_key($storage_definitions, $installed_storage_definitions) as $storage_definition) { + /** @var $storage_definition \Drupal\Core\Field\FieldStorageDefinitionInterface */ + if ($storage_definition->getProvider() == 'content_translation') { + $definition_update_manager->installFieldStorageDefinition($storage_definition->getName(), $entity_type_id, 'content_translation', $storage_definition); + } + } + } +} + /** * Implements hook_field_info_alter(). * diff --git a/core/modules/content_translation/src/ContentTranslationManager.php b/core/modules/content_translation/src/ContentTranslationManager.php index e16cf168b8..45e831928d 100644 --- a/core/modules/content_translation/src/ContentTranslationManager.php +++ b/core/modules/content_translation/src/ContentTranslationManager.php @@ -18,24 +18,14 @@ class ContentTranslationManager implements ContentTranslationManagerInterface, B */ protected $entityManager; - /** - * The updates manager. - * - * @var \Drupal\content_translation\ContentTranslationUpdatesManager - */ - protected $updatesManager; - /** * Constructs a ContentTranslationManageAccessCheck object. * * @param \Drupal\Core\Entity\EntityManagerInterface $manager * The entity type manager. - * @param \Drupal\content_translation\ContentTranslationUpdatesManager $updates_manager - * The updates manager. */ - public function __construct(EntityManagerInterface $manager, ContentTranslationUpdatesManager $updates_manager) { + public function __construct(EntityManagerInterface $manager) { $this->entityManager = $manager; - $this->updatesManager = $updates_manager; } /** @@ -82,8 +72,6 @@ public function getSupportedEntityTypes() { public function setEnabled($entity_type_id, $bundle, $value) { $config = $this->loadContentLanguageSettings($entity_type_id, $bundle); $config->setThirdPartySetting('content_translation', 'enabled', $value)->save(); - $entity_type = $this->entityManager->getDefinition($entity_type_id); - $this->updatesManager->updateDefinitions([$entity_type_id => $entity_type]); } /** diff --git a/core/modules/language/migrations/d6_language_content_settings.yml b/core/modules/language/migrations/d6_language_content_settings.yml index 6d9171ae32..0eb7bbecbc 100644 --- a/core/modules/language/migrations/d6_language_content_settings.yml +++ b/core/modules/language/migrations/d6_language_content_settings.yml @@ -40,8 +40,6 @@ process: 2: true destination: plugin: entity:language_content_settings - content_translation_update_definitions: - - node migration_dependencies: required: - d6_node_type diff --git a/core/modules/language/migrations/d7_language_content_settings.yml b/core/modules/language/migrations/d7_language_content_settings.yml index 9428f42d4d..58e547ae5f 100644 --- a/core/modules/language/migrations/d7_language_content_settings.yml +++ b/core/modules/language/migrations/d7_language_content_settings.yml @@ -43,8 +43,6 @@ process: 4: true destination: plugin: entity:language_content_settings - content_translation_update_definitions: - - node migration_dependencies: required: - d7_node_type diff --git a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestWithBundle.php b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestWithBundle.php index e6cb5428b9..42d26e0e0a 100644 --- a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestWithBundle.php +++ b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestWithBundle.php @@ -25,8 +25,10 @@ * }, * }, * base_table = "entity_test_with_bundle", + * data_table = "entity_test_with_bundle_field_data", * admin_permission = "administer entity_test_with_bundle content", * persistent_cache = FALSE, + * translatable = TRUE, * entity_keys = { * "id" = "id", * "uuid" = "uuid",