entityManager = $manager; $this->updatesManager = $updates_manager; } /** * {@inheritdoc} */ public function getTranslationHandler($entity_type_id) { return $this->entityManager->getHandler($entity_type_id, 'translation'); } /** * {@inheritdoc} */ public function getTranslationMetadata(EntityInterface $translation) { // We need a new instance of the metadata handler wrapping each translation. $entity_type = $translation->getEntityType(); $class = $entity_type->get('content_translation_metadata'); return new $class($translation, $this->getTranslationHandler($entity_type->id())); } /** * {@inheritdoc} */ public function isSupported($entity_type_id) { $entity_type = $this->entityManager->getDefinition($entity_type_id); return $entity_type->isTranslatable() && ($entity_type->hasLinkTemplate('drupal:content-translation-overview') || $entity_type->get('content_translation_ui_skip')); } /** * {@inheritdoc} */ public function getSupportedEntityTypes() { $supported_types = []; foreach ($this->entityManager->getDefinitions() as $entity_type_id => $entity_type) { if ($this->isSupported($entity_type_id)) { $supported_types[$entity_type_id] = $entity_type; } } return $supported_types; } /** * {@inheritdoc} */ 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]); } /** * {@inheritdoc} */ public function isEnabled($entity_type_id, $bundle = NULL) { $enabled = FALSE; if ($this->isSupported($entity_type_id)) { $bundles = !empty($bundle) ? [$bundle] : array_keys($this->entityManager->getBundleInfo($entity_type_id)); foreach ($bundles as $bundle) { $config = $this->loadContentLanguageSettings($entity_type_id, $bundle); if ($config->getThirdPartySetting('content_translation', 'enabled', FALSE)) { $enabled = TRUE; break; } } } return $enabled; } /** * Loads a content language config entity based on the entity type and bundle. * * @param string $entity_type_id * ID of the entity type. * @param string $bundle * Bundle name. * * @return \Drupal\language\Entity\ContentLanguageSettings * The content language config entity if one exists. Otherwise, returns * default values. */ protected function loadContentLanguageSettings($entity_type_id, $bundle) { if ($entity_type_id == NULL || $bundle == NULL) { return NULL; } $config = $this->entityManager->getStorage('language_content_settings')->load($entity_type_id . '.' . $bundle); if ($config == NULL) { $config = $this->entityManager->getStorage('language_content_settings')->create(['target_entity_type_id' => $entity_type_id, 'target_bundle' => $bundle]); } return $config; } }