class ContentLanguageSettings in Acquia Content Hub 8.2
Handles ContentLanguageSetting entity saves to apply related schema.
This is an event-centric copy of the code found in: https://www.drupal.org/project/drupal/issues/2599228 and can be removed once that issue lands.
@todo remove after https://www.drupal.org/project/drupal/issues/2599228 lands.
Hierarchy
- class \Drupal\acquia_contenthub\EventSubscriber\EntityImport\ContentLanguageSettings implements \Symfony\Component\EventDispatcher\EventSubscriberInterface
Expanded class hierarchy of ContentLanguageSettings
1 string reference to 'ContentLanguageSettings'
1 service uses ContentLanguageSettings
File
- src/
EventSubscriber/ EntityImport/ ContentLanguageSettings.php, line 19
Namespace
Drupal\acquia_contenthub\EventSubscriber\EntityImportView source
class ContentLanguageSettings implements EventSubscriberInterface {
/**
* {@inheritdoc}
*/
public static function getSubscribedEvents() {
$events[AcquiaContentHubEvents::ENTITY_IMPORT_NEW][] = 'onImportNew';
$events[AcquiaContentHubEvents::ENTITY_IMPORT_UPDATE][] = 'onImportUpdate';
return $events;
}
/**
* Handles the importing of new ContentLanguageSettings entities.
*
* @param \Drupal\acquia_contenthub\Event\EntityImportEvent $event
* The entity import event.
*/
public function onImportNew(EntityImportEvent $event) {
$settings = $event
->getEntity();
// Early return if this isn't the class of entity we care about.
if (!$settings instanceof ContentLanguageSettingsInterface) {
return;
}
// @see \Drupal\content_translation\ContentTranslationManager::isEnabled()
if ($settings
->getThirdPartySetting('content_translation', 'enabled', FALSE)) {
$this
->processSettings($settings);
}
}
/**
* Handles the importing of existing ContentLanguageSettings entities.
*
* @param \Drupal\acquia_contenthub\Event\EntityImportEvent $event
* The entity import event.
*/
public function onImportUpdate(EntityImportEvent $event) {
$settings = $event
->getEntity();
// Early return if this isn't the class of entity we care about.
if (!$settings instanceof ContentLanguageSettingsInterface) {
return;
}
/** @var \Drupal\language\ContentLanguageSettingsInterface $original_settings */
$original_settings = $settings
->get('original');
// If the original settings don't exist, treat this as though it were new.
if (!$original_settings) {
$this
->onImportNew($event);
return;
}
// @see \Drupal\content_translation\ContentTranslationManager::isEnabled()
if ($settings
->getThirdPartySetting('content_translation', 'enabled', FALSE) && !$original_settings
->getThirdPartySetting('content_translation', 'enabled', FALSE)) {
$this
->processSettings($settings);
}
}
/**
* Applies appropriate schema for content entities that support multilingual.
*
* This process appears to normally happen through the form submission
* process which is unreliable for entity imports, so we've replicated the
* basic functionality until core solves this problem.
*
* @param \Drupal\language\ContentLanguageSettingsInterface $settings
* The ContentLanguageSettings entity.
*/
protected function processSettings(ContentLanguageSettingsInterface $settings) {
/** @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 \Drupal\Core\Field\FieldStorageDefinitionInterface $storage_definition */
if ($storage_definition
->getProvider() == 'content_translation') {
$definition_update_manager
->installFieldStorageDefinition($storage_definition
->getName(), $entity_type_id, 'content_translation', $storage_definition);
}
}
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
ContentLanguageSettings:: |
public static | function | Returns an array of event names this subscriber wants to listen to. | |
ContentLanguageSettings:: |
public | function | Handles the importing of new ContentLanguageSettings entities. | |
ContentLanguageSettings:: |
public | function | Handles the importing of existing ContentLanguageSettings entities. | |
ContentLanguageSettings:: |
protected | function | Applies appropriate schema for content entities that support multilingual. |