diff --git a/includes/MediaEntityTranslationHandler.inc b/includes/MediaEntityTranslationHandler.inc index 4e78ed1..7543faa 100644 --- a/includes/MediaEntityTranslationHandler.inc +++ b/includes/MediaEntityTranslationHandler.inc @@ -30,6 +30,11 @@ class MediaEntityTranslationHandler extends EntityTranslationDefaultHandler { $form['actions']['delete_translation']['#weight'] = 10; } + // The "Source language" element is unsupported on modal forms. + if (!empty($form_state['ajax'])) { + $form['source_language']['#access'] = FALSE; + } + if ($this->getPathScheme() == 'media') { $language = $GLOBALS[LANGUAGE_TYPE_CONTENT]; $form_langcode = $this->getFormLanguage(); diff --git a/includes/media.fields.inc b/includes/media.fields.inc index 771b9f7..52a5d1f 100644 --- a/includes/media.fields.inc +++ b/includes/media.fields.inc @@ -122,6 +122,22 @@ function media_field_widget_form(&$form, &$form_state, $field, $instance, $langc '#extended' => TRUE, ); + // If translation is enabled for the entity, store its form/source langcodes + // on the elements for further usage in media_element_process(). + if (module_invoke('entity_translation', 'enabled', $element['#entity_type'], $element['#entity'])) { + $translation_handler = entity_translation_get_handler($element['#entity_type'], $element['#entity']); + $element['#media_parent_entity_form_langcode'] = $translation_handler->getFormLanguage(); + if ($source_langcode = $translation_handler->getSourceLanguage()) { + $element['#media_parent_entity_source_langcode'] = $source_langcode; + } + } + elseif (module_exists('translation') && $element['#entity_type'] == 'node' && translation_supported_type($element['#entity']->type)) { + $element['#media_parent_entity_form_langcode'] = $element['#entity']->language; + $element['#media_parent_entity_source_langcode'] = $element['#entity']->language; + } elseif ($element['#entity_type'] == 'field_collection_item') { + $element['#media_parent_entity_form_langcode'] = $form['#entity']->language; + } + // Add image field specific validators. if ($field['type'] == 'image') { if ($field_settings['min_resolution'] || $field_settings['max_resolution']) { diff --git a/includes/media.pages.inc b/includes/media.pages.inc index 65ae9ca..9bef54a 100644 --- a/includes/media.pages.inc +++ b/includes/media.pages.inc @@ -12,6 +12,27 @@ function media_file_edit_modal($form, &$form_state, $file, $js) { ctools_include('modal'); ctools_include('ajax'); + // If entity translation is enabled for the file entities and we have parent + // entity form/source langcodes, use them for the currently edited file. + if (!empty($_GET['media_parent_entity_form_langcode']) && is_string($_GET['media_parent_entity_form_langcode']) && module_invoke('entity_translation', 'enabled', 'file', $file)) { + $languages = language_list(); + if (isset($languages[$_GET['media_parent_entity_form_langcode']])) { + $langcode = $_GET['media_parent_entity_form_langcode']; + $translation_handler = entity_translation_get_handler('file', $file); + $translation_handler->setFormLanguage($langcode); + $translations = $translation_handler->getTranslations(); + if (!isset($translations->data[$langcode])) { + if (!empty($_GET['media_parent_entity_source_langcode']) && is_string($_GET['media_parent_entity_source_langcode']) && isset($translations->data[$_GET['media_parent_entity_source_langcode']])) { + $source_langcode = $_GET['media_parent_entity_source_langcode']; + } + else { + $source_langcode = $translation_handler->getLanguage(); + } + $translation_handler->setSourceLanguage($source_langcode); + } + } + } + $form_state['ajax'] = $js; form_load_include($form_state, 'inc', 'file_entity', 'file_entity.pages'); diff --git a/media.module b/media.module index 9f5722e..4ae5604 100644 --- a/media.module +++ b/media.module @@ -796,6 +796,17 @@ function media_element_process($element, &$form_state, $form) { '#weight' => 20, '#access' => $element['#file'] ? file_entity_access('update', $element['#file']) : FALSE, ); + + // If we have parent entity form/source langcodes, pass them in query. They + // will be used in + /* @see media_file_edit_modal() */ + if (!empty($element['#media_parent_entity_form_langcode'])) { + $element['edit']['#options']['query']['media_parent_entity_form_langcode'] = $element['#media_parent_entity_form_langcode']; + if (!empty($element['#media_parent_entity_source_langcode'])) { + $element['edit']['#options']['query']['media_parent_entity_source_langcode'] = $element['#media_parent_entity_source_langcode']; + } + } + $element['remove_button'] = array( '#name' => implode('_', $element['#parents']) . '_remove_button', '#type' => 'submit',