Index: translation_overview.pages.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/translation_overview/translation_overview.pages.inc,v
retrieving revision 1.8.2.2
diff -u -p -r1.8.2.2 translation_overview.pages.inc
--- translation_overview.pages.inc	4 Dec 2009 15:59:42 -0000	1.8.2.2
+++ translation_overview.pages.inc	4 Oct 2010 22:45:56 -0000
@@ -164,8 +164,16 @@ function translation_overview_node_filte
       'promote-0' => t('Not promoted'),
       'sticky-1' => t('Sticky'),
       'sticky-0' => t('Not sticky'),
-      'translate-0' => t('Up-to-date translation'),
-      'translate-1' => t('Outdated translation'),
+    ),
+  );
+
+  $filters['translation_status'] = array(
+    'title' => t('Translation'),
+    'options' => array(
+      '0' => t('Not translated'),
+      '1' => t('Translated'),
+      '2' => t('Up-to-date translation'),
+      '3' => t('Outdated translation'),
     ),
   );
 
@@ -289,7 +297,6 @@ function translation_overview_filter_for
  */
 function translation_overview_build_filter_query() {
   $filters = translation_overview_node_filters();
-
   // Build query
   $join = $where = $where_args = array();
   if (isset($_SESSION['translation_overview_filter'])) {
@@ -299,7 +306,25 @@ function translation_overview_build_filt
         case 'status':
           // Note: no exploitable hole as $key/$value have already been checked when submitted
           list($key, $value) = explode('-', $value, 2);
-          $where['status'] = 'n.'. $key .' = %d';
+          $where['status'] = 'n.'. $key .' = %d';         
+          break;
+        case 'translation_status':
+          $table = 'nt';
+          $join[$table] = "LEFT JOIN {node} nt ON $table.tnid = n.nid ";
+          switch ($value) {
+          case 1: // has translation
+            $where[$table] = "NOT ISNULL($table.nid)";
+            break;
+          case 2: // up to date
+            $where[$table] = "$table.translate = 0 AND $table.tnid != $table.nid";
+            break;
+          case 3: // out dated
+            $where[$table] = "$table.translate = 1";
+            break;
+          case 0: // no translation
+          default: 
+            $where[$table] = "ISNULL($table.nid)";
+          }
           break;
         case 'category':
           $table = "tn$index";
@@ -363,10 +388,13 @@ function translation_overview_manager_pa
   }
 
   $query = translation_overview_build_filter_query();
+
   $sql = "SELECT n.nid, n.title, n.type, n.created FROM {node} n ". implode(' ', $query['join']) ."
     WHERE (n.nid = n.tnid OR n.tnid = 0) AND n.language <> '' AND n.language IS NOT NULL
     AND ". implode(' AND ', $query['where']) . tablesort_sql($header);
 
+  //dprint_r($sql); dprint_r($query); die;
+
   $rows = array();
   $result = pager_query(db_rewrite_sql($sql), $rows_per_page, 0, NULL, $query['where_args']);
   while ($node = db_fetch_object($result)) {
@@ -380,6 +408,7 @@ function translation_overview_manager_pa
 
     // Load the node's translations and then fill in the table with the status.
     $translations = (array) translation_node_get_translations($node->tnid);
+    //dprint_r($node);    dprint_r($node->nid);    dprint_r($node->tnid);    dprint_r($translations); 
     foreach ($languages as $lang_code => $lang_name) {
       $translation = empty($translations[$lang_code]->nid) ? NULL : node_load($translations[$lang_code]->nid);
       $row[$lang_code] = array(
