function translation_entity_overview

Translations overview page callback.

Parameters

\Drupal\Core\Entity\EntityInterface $entity: The entity whose translation overview should be displayed.

1 string reference to 'translation_entity_overview'
translation_entity_menu in drupal/core/modules/translation_entity/translation_entity.module
Implements hook_menu().

File

drupal/core/modules/translation_entity/translation_entity.pages.inc, line 18
The entity translation user interface.

Code

function translation_entity_overview(EntityInterface $entity) {
  $controller = translation_entity_controller($entity
    ->entityType());
  $languages = language_list();
  $original = $entity
    ->language()->langcode;
  $translations = $entity
    ->getTranslationLanguages();
  $field_ui = module_exists('field_ui');
  $path = $controller
    ->getViewPath($entity);
  $base_path = $controller
    ->getBasePath($entity);
  $edit_path = $controller
    ->getEditPath($entity);
  $header = array(
    t('Language'),
    t('Translation'),
    t('Source language'),
    t('Status'),
    t('Operations'),
  );
  $rows = array();
  if (language_multilingual()) {

    // If we have a view path defined for the current entity get the switch
    // links based on it.
    if ($path) {
      $links = _translation_entity_get_switch_links($path);
    }

    // Determine whether the current entity is translatable.
    $translatable = FALSE;
    foreach (field_info_instances($entity
      ->entityType(), $entity
      ->bundle()) as $instance) {
      $field_name = $instance['field_name'];
      $field = field_info_field($field_name);
      if ($field['translatable']) {
        $translatable = TRUE;
        break;
      }
    }
    foreach ($languages as $language) {
      $language_name = $language->name;
      $langcode = $language->langcode;
      $add_path = $base_path . '/translations/add/' . $original . '/' . $langcode;
      $delete_path = $base_path . '/translations/delete/' . $langcode;
      if ($base_path) {
        $add_links = _translation_entity_get_switch_links($add_path);
        $edit_links = _translation_entity_get_switch_links($edit_path);
        $delete_links = _translation_entity_get_switch_links($delete_path);
      }
      $operations = array(
        'data' => array(
          '#type' => 'operations',
          '#links' => array(),
        ),
      );
      $links =& $operations['data']['#links'];
      if (isset($translations[$langcode])) {

        // Existing translation in the translation set: display status.
        $source = isset($entity->source[$langcode]) ? $entity->source[$langcode] : '';
        $is_original = $langcode == $original;
        $translation = $translations[$langcode];
        $label = $entity
          ->label($langcode);
        $link = isset($links->links[$langcode]['href']) ? $links->links[$langcode] : array(
          'href' => $path,
          'language' => $language,
        );
        $row_title = l($label, $link['href'], $link);
        if (empty($link['href'])) {
          $row_title = $is_original ? $label : t('n/a');
        }
        if ($edit_path && $controller
          ->getAccess($entity, 'update') && $controller
          ->getTranslationAccess($entity, $langcode)) {
          $links['edit'] = isset($edit_links->links[$langcode]['href']) ? $edit_links->links[$langcode] : array(
            'href' => $edit_path,
            'language' => $language,
          );
          $links['edit']['title'] = t('edit');
        }

        // @todo Consider supporting the ability to track translation publishing
        // status independently from entity status, as it may not exist.
        $translation = $entity
          ->getTranslation($langcode, FALSE);
        $status = !isset($translation->status) || $translation->status ? t('Published') : t('Not published');

        // @todo Add a theming function here.
        $status = '<span class="status">' . $status . '</span>' . (!empty($entity->retranslate[$langcode]) ? ' <span class="marker">' . t('outdated') . '</span>' : '');
        if ($is_original) {
          $language_name = t('<strong>@language_name</strong>', array(
            '@language_name' => $language_name,
          ));
          $source_name = t('n/a');
        }
        else {
          $source_name = isset($languages[$source]) ? $languages[$source]->name : t('n/a');
          $links['delete'] = isset($delete_links->links[$langcode]['href']) ? $delete_links->links[$langcode] : array(
            'href' => $delete_links,
            'language' => $language,
          );
          $links['delete']['title'] = t('delete');
        }
      }
      else {

        // No such translation in the set yet: help user to create it.
        $row_title = $source_name = t('n/a');
        $source = $entity
          ->language()->langcode;
        if ($source != $langcode && $controller
          ->getAccess($entity, 'update')) {
          if ($translatable) {
            $links['add'] = isset($add_links->links[$langcode]['href']) ? $add_links->links[$langcode] : array(
              'href' => $add_path,
              'language' => $language,
            );
            $links['add']['title'] = t('add');
          }
          elseif ($field_ui) {
            $entity_path = field_ui_bundle_admin_path($entity
              ->entityType(), $entity
              ->bundle());

            // Link directly to the fields tab to make it easier to find the
            // setting to enable translation on fields.
            $path = $entity_path . '/fields';
            $links['nofields'] = array(
              'title' => t('no translatable fields'),
              'href' => $path,
              'language' => $language,
            );
          }
        }
        $status = t('Not translated');
      }
      $rows[] = array(
        $language_name,
        $row_title,
        $source_name,
        $status,
        $operations,
      );
    }
  }
  drupal_set_title(t('Translations of %label', array(
    '%label' => $entity
      ->label(),
  )), PASS_THROUGH);

  // Add metadata to the build render array to let other modules know about
  // which entity this is.
  $build['#entity'] = $entity;
  $build['translation_entity_overview'] = array(
    '#theme' => 'table',
    '#header' => $header,
    '#rows' => $rows,
  );
  return $build;
}