function content_translation_language_fallback_candidates_entity_view_alter in Zircon Profile 8
Same name and namespace in other branches
- 8.0 core/modules/content_translation/content_translation.module \content_translation_language_fallback_candidates_entity_view_alter()
Implements hook_language_fallback_candidates_OPERATION_alter().
Performs language fallback for inaccessible translations.
File
- core/
modules/ content_translation/ content_translation.module, line 320 - Allows entities to be translated into different languages.
Code
function content_translation_language_fallback_candidates_entity_view_alter(&$candidates, $context) {
/** @var \Drupal\Core\Entity\ContentEntityInterface $entity */
$entity = $context['data'];
$entity_type_id = $entity
->getEntityTypeId();
/** @var \Drupal\content_translation\ContentTranslationManagerInterface $manager */
$manager = \Drupal::service('content_translation.manager');
if ($manager
->isEnabled($entity_type_id, $entity
->bundle())) {
$entity_type = $entity
->getEntityType();
$permission = $entity_type
->getPermissionGranularity() == 'bundle' ? $permission = "translate {$entity->bundle()} {$entity_type_id}" : "translate {$entity_type_id}";
$current_user = \Drupal::currentuser();
if (!$current_user
->hasPermission('translate any entity') && !$current_user
->hasPermission($permission)) {
foreach ($entity
->getTranslationLanguages() as $langcode => $language) {
$metadata = $manager
->getTranslationMetadata($entity
->getTranslation($langcode));
if (!$metadata
->isPublished()) {
unset($candidates[$langcode]);
}
}
}
}
}