diff --git a/core/modules/content_translation/content_translation.admin.inc b/core/modules/content_translation/content_translation.admin.inc index 8ea5d1c..a96999f 100644 --- a/core/modules/content_translation/content_translation.admin.inc +++ b/core/modules/content_translation/content_translation.admin.inc @@ -35,7 +35,7 @@ function content_translation_field_sync_widget(FieldDefinitionInterface $field) $settings = array('dependent_selectors' => array('instance[settings][translation_sync]' => array('file'))); - $translation_sync = $field->getSetting('translation_sync'); + $translation_sync = \Drupal::config('content_translation.field_settings')->get($field->id() . '.translation_sync'); $element = array( '#type' => 'checkboxes', '#title' => t('Translatable elements'), diff --git a/core/modules/content_translation/content_translation.module b/core/modules/content_translation/content_translation.module index 68c0a7e..6fe76e4 100644 --- a/core/modules/content_translation/content_translation.module +++ b/core/modules/content_translation/content_translation.module @@ -730,29 +730,29 @@ function content_translation_form_field_ui_field_edit_form_submit($form, array & * Implements hook_form_FORM_ID_alter() for 'field_ui_field_instance_edit_form'. */ function content_translation_form_field_ui_field_instance_edit_form_alter(array &$form, array &$form_state, $form_id) { - if ($form['#field']->isTranslatable()) { + if ($form_state['instance']->isTranslatable()) { module_load_include('inc', 'content_translation', 'content_translation.admin'); - $element = content_translation_field_sync_widget($form['#field']); + $element = content_translation_field_sync_widget($form_state['instance']); if ($element) { $form['instance']['settings']['translation_sync'] = $element; + $form['#submit'][] = 'content_translation_form_field_ui_field_instance_edit_form_submit'; } } } /** + * Form submission handler for 'field_ui_field_instance_edit_form'. + */ +function content_translation_form_field_ui_field_instance_edit_form_submit($form, array &$form_state) { + $key = $form_state['instance']->id() . '.translation_sync'; + $value = $form_state['values']['instance']['settings']['translation_sync']; + \Drupal::config('content_translation.field_settings')->set($key, $value)->save(); +} + +/** * Implements hook_entity_presave(). */ function content_translation_entity_presave(EntityInterface $entity) { - // By default no column has to be synchronized. - // @todo Replace with own storage in https://drupal.org/node/2224761 - if ($entity->getEntityTypeId() === 'field_config') { - $entity->settings += array('translation_sync' => FALSE); - } - // Synchronization can be enabled per instance. - // @todo Replace with own storage in https://drupal.org/node/2224761 - if ($entity->getEntityTypeId() === 'field_instance_config') { - $entity->settings += array('translation_sync' => FALSE); - } if ($entity instanceof ContentEntityInterface && $entity->isTranslatable()) { // @todo Avoid using request attributes once translation metadata become // regular fields. @@ -915,12 +915,13 @@ function content_translation_save_settings($settings) { foreach ($bundle_settings['columns'] as $field_name => $column_settings) { $instance = field_info_instance($entity_type, $field_name, $bundle); if ($instance->isTranslatable()) { - $instance->settings['translation_sync'] = $column_settings; + \Drupal::config('content_translation.field_settings')->set($entity_type . '.' . $bundle . '.' . $field_name . '.translation_sync', $column_settings)->save(); } // If the field does not have translatable enabled we need to reset // the sync settings to their defaults. else { - unset($instance->settings['translation_sync']); + $key = $entity_type . '.' . $bundle . '.' . $field_name . '.translation_sync'; + \Drupal::config('content_translation.field_settings')->clear($key)->save(); } $instance->save(); } diff --git a/core/modules/content_translation/lib/Drupal/content_translation/FieldTranslationSynchronizer.php b/core/modules/content_translation/lib/Drupal/content_translation/FieldTranslationSynchronizer.php index 1c8db66..fa1f8b0 100644 --- a/core/modules/content_translation/lib/Drupal/content_translation/FieldTranslationSynchronizer.php +++ b/core/modules/content_translation/lib/Drupal/content_translation/FieldTranslationSynchronizer.php @@ -58,7 +58,8 @@ public function synchronizeFields(ContentEntityInterface $entity, $sync_langcode // Sync if the field is translatable, not empty, and the synchronization // setting is enabled. - if ($field_definition->isTranslatable() && !$items->isEmpty() && $translation_sync = $field_definition->getSetting('translation_sync')) { + $key = $entity->getEntityTypeId() . '.' . $entity->bundle() . '.' . $field_name . '.translation_sync'; + if ($field_definition->isTranslatable() && !$items->isEmpty() && $translation_sync = \Drupal::config('content_translation.field_settings')->get($key)) { // Retrieve all the untranslatable column groups and merge them into // single list. $groups = array_keys(array_diff($translation_sync, array_filter($translation_sync))); diff --git a/core/modules/content_translation/lib/Drupal/content_translation/Tests/ContentTranslationSyncImageTest.php b/core/modules/content_translation/lib/Drupal/content_translation/Tests/ContentTranslationSyncImageTest.php index 3f990db..7085165 100644 --- a/core/modules/content_translation/lib/Drupal/content_translation/Tests/ContentTranslationSyncImageTest.php +++ b/core/modules/content_translation/lib/Drupal/content_translation/Tests/ContentTranslationSyncImageTest.php @@ -69,14 +69,31 @@ protected function setupTestFields() { 'field_name' => $this->fieldName, 'bundle' => $this->entityTypeId, 'label' => 'Test translatable image field', - 'settings' => array( - 'translation_sync' => array( - 'file' => FALSE, - 'alt' => 'alt', - 'title' => 'title', + ))->save(); + + // Enable content translation for image field on the test entity. + $settings = array( + 'content_translation' => array( + 'enabled' => TRUE, + 'fields' => array( + $this->fieldName => TRUE, ), ), - ))->save(); + ); + $key = $this->entityTypeId . '.' . $this->entityTypeId; + \Drupal::config('content_translation.settings')->set($key, $settings)->save(); + + // Enable content translation for the 'alt' and 'title' properties on the + // image field. + $settings = array( + 'translation_sync' => array( + 'file' => FALSE, + 'alt' => 'alt', + 'title' => 'title', + ), + ); + $key = $this->entityTypeId . '.' . $this->entityTypeId . '.' . $this->fieldName; + \Drupal::config('content_translation.field_settings')->set($key, $settings)->save(); } /**