function entity_translation_hierarchy_get_candidate in Language Hierarchy 7
Returns langcode of entity translation candidate.
Parameters
object $entity:
string $entity_type:
string $langcode:
bool $include_current:
Return value
string|null
5 calls to entity_translation_hierarchy_get_candidate()
- entity_translation_hierarchy_field_attach_view_alter in modules/
entity_translation_hierarchy/ entity_translation_hierarchy.module - Implements hook_field_attach_view_alter().
- entity_translation_hierarchy_init in modules/
entity_translation_hierarchy/ entity_translation_hierarchy.node.inc - Implements hook_init().
- entity_translation_hierarchy_is_blocked in modules/
entity_translation_hierarchy/ entity_translation_hierarchy.module - Checks if for given language the entity is blocked.
- hreflang_hierarchy_get_links in modules/
hreflang_hierarchy/ hreflang_hierarchy.module - Gets hreflang links for given path.
- xmlsitemap_language_hierarchy_create_link in modules/
xmlsitemap_language_hierarchy/ xmlsitemap_language_hierarchy.module - Create a sitemap link from a node.
File
- modules/
entity_translation_hierarchy/ entity_translation_hierarchy.module, line 227
Code
function entity_translation_hierarchy_get_candidate($entity, $entity_type, $langcode, $include_current = TRUE) {
if ($handler = entity_translation_get_handler($entity_type, $entity, TRUE)) {
if ($translations = $handler
->getTranslations()) {
// Make a copy of this so we can operate on translation data without affecting the original.
$translation_candidates = $translations->data;
// Filter out unpublished or inaccessible translations.
// We treat them as non existing - they can't block nor be displayed at all.
// Inheritance process flows through them, so to speak...
foreach ($translations->data as $translation_langcode => $translation) {
if (!entity_translation_access($entity_type, $translation)) {
unset($translation_candidates[$translation_langcode]);
}
}
// Remove current candidate.
if (!$include_current && isset($translation_candidates[$langcode])) {
unset($translation_candidates[$langcode]);
}
$fallback_candidates = array_keys(language_hierarchy_get_ancestors($langcode));
array_unshift($fallback_candidates, $langcode);
// Return the closest candidate with existing translation.
$translation_candidate_langcodes = array_keys($translation_candidates);
return current(array_intersect($fallback_candidates, $translation_candidate_langcodes));
}
}
return NULL;
}