You are here

translation_overview.module in Translation Overview 6

Same filename and directory in other branches
  1. 6.2 translation_overview.module

File

translation_overview.module
View source
<?php

/**
 * Implementation of hook_help().
 */
function translation_overview_help($path, $arg) {
  switch ($path) {
    case 'admin/content/translation_overview':
      $args = array();
      $statuses = array(
        'original',
        'current',
        'outofdate',
        'missing',
      );
      foreach ($statuses as $status) {
        $args['!' . $status] = theme('translation_overview_status_img', $status, $status);
      }
      return '<p>' . t('The table uses the following symbols to indicate the translation status: !original Original language, !current Current translation, !outofdate Out-of-date translation, !missing Untranslated.', $args) . '</p>';
  }
}

/**
 * Implementation of hook_menu().
 */
function translation_overview_menu() {
  $items = array();
  $items['admin/content/translation_overview'] = array(
    'title' => 'Translation overview',
    'type' => MENU_NORMAL_ITEM,
    'description' => "View the translation status of the site's content.",
    'page callback' => 'translation_overview_overview_page',
    'file' => 'translation_overview.pages.inc',
    'access arguments' => array(
      'translate content',
    ),
  );
  $items['admin/content/translation_overview/all'] = array(
    'title' => 'All',
    'description' => 'All translations',
    'type' => MENU_DEFAULT_LOCAL_TASK,
    'weight' => -20,
    'access arguments' => array(
      'translate content',
    ),
  );
  foreach (language_list() as $key => $language) {
    if ($language->enabled) {
      $items['admin/content/translation_overview/' . $language->language] = array(
        'title' => $language->language,
        'description' => $language->name,
        'type' => MENU_LOCAL_TASK,
        'page callback' => 'translation_overview_language_page',
        'page arguments' => array(
          $language->language,
        ),
        'file' => 'translation_overview.pages.inc',
        'access arguments' => array(
          'translate content',
        ),
      );
    }
  }
  return $items;
}

/**
 * Implementation of hook_theme().
 */
function translation_overview_theme() {
  return array(
    'translation_overview_translation_link' => array(
      'arguments' => array(
        'status' => NULL,
        'path' => '',
        'options' => array(),
        'show_long' => FALSE,
      ),
    ),
    'translation_overview_status_img' => array(
      'arguments' => array(
        'status' => NULL,
        'alt_text' => '',
      ),
    ),
  );
}

/**
 * Get a list of the node types that have translation support enabled.
 *
 * @return array of with node types as keys and their names as values.
 */
function translation_overview_node_types() {
  $types = array();
  foreach (node_get_types('names') as $type => $name) {
    if (translation_supported_type($type)) {
      $types[$type] = $name;
    }
  }
  return $types;
}

/**
 * Build a link to the translated node.
 *
 * @param $node Source node object
 * @param $translation_nid Id of the translated node.
 * @param $language Language code.
 * @param $show_long Boolean, indicating if a longer version of the text should
 *   be displayed.
 * @return Link to the node if the user has permission or else just text.
 */
function translation_overview_translation_link($node, $translation_nid, $language, $show_long = FALSE) {
  $path = 'node/' . $node->nid;
  $options = array();
  if ($language == $node->language) {
    return theme('translation_overview_translation_link', 'original', $path, $options, $show_long);
  }
  if (!empty($translation_nid)) {

    // Determine the status of the translation.
    $tnode = node_load($translation_nid);
    if ($tnode->nid) {
      if (node_access('update', $tnode)) {
        $path = "node/{$tnode->nid}/edit";
        $options['query'] = array(
          'destination' => $_GET['q'],
        );
      }
      else {
        $path = 'node/' . $tnode->nid;
      }
      if ($tnode->translate == 0) {
        return theme('translation_overview_translation_link', 'current', $path, $options, $show_long);
      }
      return theme('translation_overview_translation_link', 'outofdate', $path, $options, $show_long);
    }
  }

  // Assume it's missing, see if we can create a translation.
  $path = '';
  if (node_access('create', $node)) {
    $path = 'node/add/' . str_replace('_', '-', $node->type);
    $options['query'] = array(
      'destination' => $_GET['q'],
      'translation' => $node->nid,
      'language' => $language,
    );
  }
  return theme('translation_overview_translation_link', 'missing', $path, $options, $show_long);
}
function theme_translation_overview_status_img($status, $alt_text) {
  $img_path = drupal_get_path('module', 'translation_overview') . "/status_{$status}.png";
  return theme('image', $img_path, $alt_text);
}
function theme_translation_overview_translation_link($status, $path, $options = array(), $show_long = FALSE) {
  switch ($status) {
    case 'original':
      $long = t('Original');
      $options['attributes'] = array(
        'title' => t('View original'),
      );
      break;
    case 'current':
      $long = t('Complete');
      if (preg_match('/node\\/\\d*\\/edit/', $path)) {
        $options['attributes'] = array(
          'title' => t('Translation is up-to-date, edit it'),
        );
      }
      else {
        $options['attributes'] = array(
          'title' => t('Translation is up-to-date, view it'),
        );
      }
      break;
    case 'outofdate':
      $long = t('Out-of-date');
      if (preg_match('/node\\/\\d*\\/edit/', $path)) {
        $options['attributes'] = array(
          'title' => t('Translation is out-of-date, edit it'),
        );
      }
      else {
        $options['attributes'] = array(
          'title' => t('Translation is out-of-date, view it'),
        );
      }
      break;
    case 'missing':
      $long = t('Untranslated');
      $options['attributes'] = array(
        'title' => t('Translation does not exist, create it'),
      );
      break;
  }
  $text = theme('translation_overview_status_img', $status, $long) . ($show_long ? ' ' . $long : '');
  $options['html'] = TRUE;
  if ($path) {
    return l($text, $path, $options);
  }
  return $text;
}

Functions

Namesort descending Description
theme_translation_overview_status_img
theme_translation_overview_translation_link
translation_overview_help Implementation of hook_help().
translation_overview_menu Implementation of hook_menu().
translation_overview_node_types Get a list of the node types that have translation support enabled.
translation_overview_theme Implementation of hook_theme().
translation_overview_translation_link Build a link to the translated node.