You are here

function translation_overview_assignment_page in Translation Overview 6.2

1 string reference to 'translation_overview_assignment_page'
translation_overview_menu in ./translation_overview.module
Implementation of hook_menu().

File

./translation_overview.pages.inc, line 411

Code

function translation_overview_assignment_page($language) {
  drupal_add_css(drupal_get_path('module', 'translation_overview') . '/translation_overview.css');
  $rows_per_page = 30;
  $node_types = node_get_types('names');
  $languages = language_list();

  // Bail if there are no translatable nodes
  if (count(translation_overview_node_types()) == 0) {
    drupal_set_message(t('There are no translatable node types on this site.'), 'error');
    return '';
  }
  $header = array(
    array(
      'field' => 'n.title',
      'data' => t('Title'),
    ),
    array(
      'field' => 'translation_status',
      'data' => t('Status'),
      'sort' => 'desc',
    ),
    array(
      'field' => 'n.type',
      'data' => t('Type'),
    ),
    array(
      'field' => 'n.language',
      'data' => t('Source language'),
    ),
    array(
      'field' => 'n.created',
      'data' => t('Created'),
    ),
  );

  // We want to sort the nodes by the status so we have to resort to this SQL
  // CASE statement.
  $rows = array();
  $query = translation_overview_build_filter_query();
  $language_field = translation_overview_field_name($language);
  $sql = "SELECT n.nid, n.title, n.type, n.status, n.language, n.created, nt.nid AS translation_nid, CASE\n    WHEN n.language = '%s' " . " THEN 0\n    WHEN nt.tnid IS NULL   " . " THEN 3 + 2 * top.{$language_field}\n    WHEN nt.translate = 0  " . " THEN 1\n    WHEN n.nid = n.tnid    " . " THEN 2 + 2 * top.{$language_field}\n    ELSE -1 END AS translation_status\n    FROM {node} n\n    LEFT JOIN {node} nt ON n.nid = nt.tnid AND nt.language = '%s'\n    INNER JOIN {translation_overview_priority} top ON n.nid = top.tnid AND top.{$language_field} <> %d\n    " . implode(' ', $query['join']) . "\n    WHERE (n.nid = n.tnid OR n.tnid = 0) AND n.language NOT IN ('', '%s') AND n.language IS NOT NULL\n    AND " . implode(' AND ', $query['where']) . tablesort_sql($header);

  // The %s in the CASE causes pager_query() to screw up the count query so build it by hand and eat the extra %s.
  $count_sql = "SELECT COUNT(n.nid), '%s' AS junk\n    FROM {node} n\n    LEFT JOIN {node} nt ON n.nid = nt.tnid AND nt.language = '%s'\n    INNER JOIN {translation_overview_priority} top ON n.nid = top.tnid AND top.{$language_field} <> %d\n    " . implode(' ', $query['join']) . "\n    WHERE (n.nid = n.tnid OR n.tnid = 0) AND n.language NOT IN ('', '%s') AND n.language IS NOT NULL\n    AND " . implode(' AND ', $query['where']);

  // We need to put the priority and language that we use as an argument early
  // in the query at the beginning of the arguments list.
  $args = array_merge(array(
    $language,
    $language,
    TRANSLATION_OVERVIEW_IGNORE,
    $language,
  ), $query['where_args']);
  $rows = array();
  $result = pager_query(db_rewrite_sql($sql), $rows_per_page, 0, db_rewrite_sql($count_sql), $args);
  while ($n = db_fetch_object($result)) {
    $node = node_load($n->nid);
    $translation = empty($n->translation_nid) ? NULL : node_load($n->translation_nid);
    $rows[] = array(
      array(
        'data' => node_access('view', $node) ? l(translation_overview_trimmed_title($node, 30), 'node/' . $node->nid, array(
          'attributes' => array(
            'title' => $node->title,
          ),
        )) : translation_overview_trimmed_title($node, 30),
      ),
      array(
        'data' => translation_overview_translation_link($node, $translation, $language, TRUE),
        'class' => 'status',
      ),
      array(
        'data' => isset($node_types[$node->type]) ? $node_types[$node->type] : check_plain($node->type),
      ),
      array(
        'data' => isset($languages[$node->language]) ? $languages[$node->language]->name : check_plain($node->language),
      ),
      array(
        'data' => format_date($node->created, 'custom', 'j M Y'),
      ),
    );
  }
  return drupal_get_form('translation_overview_filter_form') . theme('table', $header, $rows, array(
    'class' => 'trov',
  )) . theme('pager', NULL, $rows_per_page);
}