diff --git a/entity_translation.admin.inc b/entity_translation.admin.inc index 9f17614..e16af3b 100644 --- a/entity_translation.admin.inc +++ b/entity_translation.admin.inc @@ -68,10 +68,6 @@ function entity_translation_admin_form($form, $form_state) { '#type' => 'vertical_tabs', ); - $form['entity_translation_settings'] = array( - '#tree' => TRUE, - ); - $languages = array( ENTITY_TRANSLATION_LANGUAGE_DEFAULT => t('Default language'), ENTITY_TRANSLATION_LANGUAGE_CURRENT => t('Current language'), @@ -93,25 +89,27 @@ function entity_translation_admin_form($form, $form_state) { if (entity_translation_enabled_bundle($entity_type, $bundle)) { $enabled_bundles++; $settings = entity_translation_settings($entity_type, $bundle); + $settings_key = 'entity_translation_settings_' . $entity_type . '__' . $bundle; - // Show fieldsets only if there is more than one bundle defined. - if (count($bundles) > 1) { - $form['entity_translation_settings'][$entity_type][$bundle] = array( + // If the entity defines no bundle we do not need the fieldset. + if (count($bundles) > 1 || $bundle != $entity_type) { + $form['settings'][$entity_type][$settings_key] = array( '#type' => 'fieldset', '#title' => $info['label'], '#collapsible' => TRUE, '#collapsed' => TRUE, + '#tree' => TRUE, ); } - $form['entity_translation_settings'][$entity_type][$bundle]['default_language'] = array( + $form['settings'][$entity_type][$settings_key]['default_language'] = array( '#type' => 'select', '#title' => t('Default language'), '#options' => $languages, '#default_value' => $settings['default_language'], ); - $form['entity_translation_settings'][$entity_type][$bundle]['hide_language_selector'] = array( + $form['settings'][$entity_type][$settings_key]['hide_language_selector'] = array( '#type' => 'checkbox', '#title' => t('Hide language selector'), '#default_value' => $settings['hide_language_selector'], @@ -119,17 +117,13 @@ function entity_translation_admin_form($form, $form_state) { } } - if (!empty($form['entity_translation_settings'][$entity_type])) { - $form['entity_translation_settings'][$entity_type] += array( + if ($enabled_bundles > 0) { + $form['settings'][$entity_type][$settings_key]['#collapsed'] = $enabled_bundles > 1; + $form['settings'][$entity_type] += array( '#type' => 'fieldset', '#group' => 'tabs', '#title' => $label, ); - - // If we have only one enabled bundle remove the fieldset. - if ($enabled_bundles == 1) { - unset($form['entity_translation_settings'][$entity_type][$bundle]['#type']); - } } } @@ -159,19 +153,19 @@ function entity_translation_admin_form_submit($form, $form_state) { * (optional) The settings to be applied. Defaults to the entity default * settings. */ -function entity_translation_settings_init($entity_type, $settings = NULL) { +function entity_translation_settings_init($entity_type, $settings = array()) { if (entity_translation_enabled($entity_type)) { $info = entity_get_info($entity_type); $bundles = !empty($info['bundles']) ? array_keys($info['bundles']) : array($entity_type); foreach ($bundles as $bundle) { if (entity_translation_enabled_bundle($entity_type, $bundle)) { - $et_settings[$entity_type][$bundle] = !empty($settings) ? $settings : entity_translation_settings($entity_type, $bundle); + $settings += entity_translation_settings($entity_type, $bundle); } } - } - variable_set('entity_translation_settings', $et_settings); + variable_set('entity_translation_settings_' . $entity_type . '__' . $bundle, $settings); + } } /** diff --git a/entity_translation.install b/entity_translation.install index e37c344..9108aca 100644 --- a/entity_translation.install +++ b/entity_translation.install @@ -211,18 +211,12 @@ function entity_translation_disable() { * Implements hook_uninstall(). */ function entity_translation_uninstall() { + db_delete('variable') + ->condition('name', db_like('entity_translation_') . '%', 'LIKE') + ->execute(); + variable_del('translation_language_type'); variable_del('locale_field_language_fallback'); - variable_del('entity_translation_entity_types'); - variable_del('entity_translation_disabled_content_types'); - variable_del('entity_translation_languages_enabled'); - variable_del('entity_translation_shared_labels'); - variable_del('entity_translation_settings'); - - foreach (node_type_get_types() as $type => $object) { - variable_del("entity_translation_node_metadata_$type"); - variable_del("entity_translation_comment_filter_$type"); - } } /** diff --git a/entity_translation.module b/entity_translation.module index 66c4f47..11de059 100644 --- a/entity_translation.module +++ b/entity_translation.module @@ -779,12 +779,14 @@ function entity_translation_entity_load($entities, $entity_type) { */ function entity_translation_field_extra_fields() { $extra = array(); - $et_settings = variable_get('entity_translation_settings', array()); + $enabled = variable_get('entity_translation_entity_types', array()); $info = entity_get_info(); - foreach ($et_settings as $entity_type => $entity_settings) { + foreach ($enabled as $entity_type) { if (entity_translation_enabled($entity_type)) { - foreach ($entity_settings as $bundle => $settings) { + $bundles = !empty($info[$entity_type]['bundles']) ? array_keys($info[$entity_type]['bundles']) : array($entity_type); + foreach ($bundles as $bundle) { + $settings = entity_translation_settings($entity_type, $bundle); $language_key = entity_translation_get_handler($entity_type, $bundle)->getLanguageKey(); if (empty($settings['hide_language_selector'])) { $extra[$entity_type][$bundle] = array( @@ -1510,13 +1512,9 @@ function entity_translation_enabled_bundle($entity_type, $bundle) { * Return the entity translation settings for the given entity type and bundle. */ function entity_translation_settings($entity_type, $bundle) { - $settings = array(); - $et_settings = variable_get('entity_translation_settings', array()); + $settings = variable_get('entity_translation_settings_' . $entity_type . '__' . $bundle, array()); - if (isset($et_settings[$entity_type][$bundle])) { - $settings = $et_settings[$entity_type][$bundle]; - } - else { + if (empty($settings)) { $info = entity_get_info($entity_type); if (!empty($info['translation']['entity_translation']['default settings'])) { $settings = $info['translation']['entity_translation']['default settings']; diff --git a/includes/translation.handler.inc b/includes/translation.handler.inc index 41c0e0f..2a6c7c7 100644 --- a/includes/translation.handler.inc +++ b/includes/translation.handler.inc @@ -628,11 +628,11 @@ class EntityTranslationDefaultHandler implements EntityTranslationHandlerInterfa * @see EntityTranslationHandlerInterface::getDefaultLanguage() */ public function getDefaultLanguage() { - $et_settings = variable_get('entity_translation_settings', array()); list(, , $bundle) = entity_extract_ids($this->entityType, $this->entity); + $settings = variable_get('entity_translation_settings_' . $this->entityType . '__' . $bundle, array()); - if (isset($et_settings[$this->entityType][$bundle])) { - switch ($et_settings[$this->entityType][$bundle]['default_language']) { + if (!empty($settings['default_language'])) { + switch ($settings['default_language']) { case ENTITY_TRANSLATION_LANGUAGE_DEFAULT: $langcode = language_default()->language; break; @@ -647,7 +647,7 @@ class EntityTranslationDefaultHandler implements EntityTranslationHandlerInterfa default: // An actual language code has been explicitly configured. - $langcode = $et_settings[$this->entityType][$bundle]['default_language']; + $langcode = $settings['default_language']; } } else { @@ -907,9 +907,10 @@ class EntityTranslationDefaultHandler implements EntityTranslationHandlerInterfa $no_translations = count($translations->data) < 2; $languages = language_list(); - // Store the information about being editing the original values for later - // reuse: a language change might render impossibile to determine this - // otherwise. + // The only way to determine whether we are editing the original values is + // comparing form language and entity language. Since a language change + // might render impossibile to make this check after form submission we + // store the information here. $form_state['entity_translation']['is_translation'] = $is_translation; // Adjust page title to specify the current language being edited, if we