function entity_translation_field_language_alter in Entity Translation 7
Implements hook_field_language_alter().
Performs language fallback for unaccessible translations.
File
- ./
entity_translation.module, line 920
Code
function entity_translation_field_language_alter(&$display_language, $context) {
if (variable_get('locale_field_language_fallback', TRUE) && entity_translation_enabled($context['entity_type'])) {
$entity = $context['entity'];
$entity_type = $context['entity_type'];
$handler = entity_translation_get_handler($entity_type, $entity);
$translations = $handler
->getTranslations();
// Apply fallback only on unpublished translations as missing translations
// are already handled in locale_field_language_alter().
if (isset($translations->data[$context['language']]) && !entity_translation_access($entity_type, $translations->data[$context['language']])) {
list(, , $bundle) = entity_extract_ids($entity_type, $entity);
$instances = field_info_instances($entity_type, $bundle);
$entity = clone $entity;
foreach ($translations->data as $langcode => $translation) {
if ($langcode == $context['language'] || !entity_translation_access($entity_type, $translations->data[$langcode])) {
// Unset unaccessible field translations: if the field is
// untranslatable unsetting a language different from LANGUAGE_NONE
// has no effect.
foreach ($instances as $instance) {
unset($entity->{$instance['field_name']}[$langcode]);
}
}
}
// Find the new fallback values.
locale_field_language_fallback($display_language, $entity, $context['language']);
}
elseif (!field_has_translation_handler($entity_type, 'locale')) {
// If not handled by the Locale translation handler trigger fallback too.
locale_field_language_fallback($display_language, $entity, $context['language']);
}
}
}