diff --git a/core/modules/translation_entity/lib/Drupal/translation_entity/Tests/EntityTranslationSettingsTest.php b/core/modules/translation_entity/lib/Drupal/translation_entity/Tests/EntityTranslationSettingsTest.php index 41600ac..6caba42 100644 --- a/core/modules/translation_entity/lib/Drupal/translation_entity/Tests/EntityTranslationSettingsTest.php +++ b/core/modules/translation_entity/lib/Drupal/translation_entity/Tests/EntityTranslationSettingsTest.php @@ -19,7 +19,7 @@ class EntityTranslationSettingsTest extends WebTestBase { * * @var array */ - public static $modules = array('language', 'translation_entity', 'comment'); + public static $modules = array('language', 'translation_entity', 'comment', 'field_ui'); public static function getInfo() { return array( @@ -37,7 +37,7 @@ function setUp() { $this->drupalCreateContentType(array('type' => 'article')); $this->drupalCreateContentType(array('type' => 'page')); - $admin_user = $this->drupalCreateUser(array('administer languages', 'administer entity translation')); + $admin_user = $this->drupalCreateUser(array('administer languages', 'administer entity translation', 'administer node fields')); $this->drupalLogin($admin_user); } @@ -119,4 +119,43 @@ protected function assertSettings($entity_type, $bundle, $enabled, $edit) { return $this->assertEqual(translation_entity_enabled($entity_type, $bundle), $enabled, $message); } + /** + * Tests that field instance setting depends on bundle translatability. + */ + function testFieldTranslatableSettingsUI() { + + // At least one field needs to be translatable to enable article for + // translation. Create an extra field to be used for this purpose. + $field = array( + 'field_name' => 'article_text', + 'type' => 'text', + ); + field_create_field($field); + $instance = array( + 'field_name' => 'article_text', + 'entity_type' => 'node', + 'bundle' => 'article', + ); + field_create_instance($instance); + + // Tests that field instance doesn't have translatable setting if bundle + // is not translatable. + $path = 'admin/structure/types/manage/article/fields/body/field-settings'; + $this->drupalGet($path); + $this->assertNoText('Enable translation', 'No translatable setting for field.'); + + // Tests that field instance has translatable setting if bundle is + // translatable. Note: this field instance is not translatable when + // enable bundle translatability. + $edit = array( + 'entity_types[node]' => TRUE, + 'settings[node][article][settings][language][language_show]' => TRUE, + 'settings[node][article][translatable]' => TRUE, + 'settings[node][article][fields][article_text]' => TRUE, + ); + $this->assertSettings('node', 'article', TRUE, $edit); + $this->drupalGet($path); + $this->assertText('Enable translation', 'Translatable setting is available for field.'); + } + } diff --git a/core/modules/translation_entity/translation_entity.module b/core/modules/translation_entity/translation_entity.module index 0167180..d38dbb2 100644 --- a/core/modules/translation_entity/translation_entity.module +++ b/core/modules/translation_entity/translation_entity.module @@ -735,34 +735,41 @@ function translation_entity_field_extra_fields() { */ function translation_entity_form_field_ui_field_settings_form_alter(array &$form, array &$form_state, $form_id) { $field = $form['#field']; + $entity_type = $form['#entity_type']; + $bundle = $form['#bundle']; $field_name = $field['field_name']; + + $bundle_is_translatable = translation_entity_enabled($entity_type, $bundle); + $field_has_data = field_has_data($field); $translatable = $field['translatable']; - $label = t('Field translation'); - - if (field_has_data($field)) { - $form['field']['translatable'] = array( - '#type' => 'item', - '#title' => $label, - '#attributes' => array('class' => 'translatable'), - 'link' => array( - '#type' => 'link', - '#prefix' => t('This field has data in existing content.') . ' ', - '#title' => !$translatable ? t('Enable translation') : t('Disable translation'), - '#href' => 'admin/config/regional/translation_entity/translatable/' . $field_name, - '#options' => array('query' => drupal_get_destination()), - '#access' => user_access('administer entity translation'), - ), - ); - } - else { - $form['field']['translatable'] = array( - '#type' => 'checkbox', - '#title' => t('Users may translate this field.'), - '#default_value' => $translatable, - ); - } - $form['field']['translatable']['#weight'] = 20; + $form['field']['translatable'] = array( + '#type' => 'checkbox', + '#title' => t('Translatable'), + '#default_value' => $translatable, + '#disabled' => $field_has_data || !$bundle_is_translatable, + '#weight' => 20, + ); + // Provide helpful pointers for administrators. + if (user_access('administer entity translation')) { + if (field_has_data($field)) { + $toggle_url = url('admin/config/regional/translation_entity/translatable/' . $field_name, array( + 'query' => drupal_get_destination(), + )); + $form['field']['translatable']['#description'] = t('This field has data in existing content. @toggle-label.', array( + '@toggle-translatable-url' => $toggle_url, + '@toggle-label' => !$translatable ? t('Associate all field values with a language') : t('Remove language association from all field values'), + )); + } + elseif (!$bundle_is_translatable) { + $toggle_url = url('admin/config/regional/content-language', array( + 'query' => drupal_get_destination(), + )); + $form['field']['translatable']['#description'] = t('To enable translation of this field, enable language support for this type.', array( + '@language-settings-url' => $toggle_url, + )); + } + } } /**