Index: nodereferrer.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/nodereferrer/nodereferrer.module,v retrieving revision 1.20 diff -u -p -r1.20 nodereferrer.module --- nodereferrer.module 22 Sep 2009 11:35:59 -0000 1.20 +++ nodereferrer.module 31 Oct 2009 14:10:38 -0000 @@ -391,7 +391,8 @@ function nodereferrer_referrers($nid, $ $db_info = content_database_info($fields[$fieldname]); if ($translations) { - $query = "SELECT n.nid, n.vid, n.title + //Original Query + /* $query = "SELECT n.nid, n.vid, n.title FROM {" . $db_info['table'] . "} nr INNER JOIN {node} current_node ON current_node.nid = %d INNER JOIN {node} n ON n.vid = nr.vid AND n.status = 1 " . $filter_nodetypes . " @@ -399,7 +400,45 @@ function nodereferrer_referrers($nid, $ WHERE (current_node.tnid = 0 AND nr." . $db_info['columns']['nid']['column'] . " = current_node.nid) OR (current_node.tnid > 0 AND nr." . $db_info['columns']['nid']['column'] . " = translations.nid) - ORDER BY " . $order; + ORDER BY " . $order;*/ + + //This Query gets all the untranslated reffering nodes (n.tnid = 0) + //Thats why we run it through db_rewrite_sql SQL with array('view' => true) this switches off i18n for this query + $query = "SELECT n.nid, n.vid, n.title + FROM {" . $db_info['table'] . "} nr + INNER JOIN {node} current_node ON current_node.nid = %d + INNER JOIN {node} n ON n.vid = nr.vid AND n.status = 1 " . $filter_nodetypes . " + LEFT JOIN {node} translations ON current_node.tnid > 0 AND translations.tnid = current_node.tnid + WHERE n.tnid = 0 + AND ( + (current_node.tnid = 0 AND nr." . $db_info['columns']['nid']['column'] . " = current_node.nid) + OR + (current_node.tnid > 0 AND nr." . $db_info['columns']['nid']['column'] . " = translations.nid) + ) + "; + + $query = db_rewrite_sql($query,'n','nid',array('view' => true)); + $result = db_query($query, $nid); + while ($value = db_fetch_array($result)) { + // avoid duplicate referrers by using nid as key + $values[$value['nid']] = $value; + } + + //this Query gets the translated refferers and also respects the language settings later. + //note: this only includes nodes with translation (n.tnid > 0) + $query = "SELECT n.nid, n.vid, n.title + FROM {" . $db_info['table'] . "} nr + INNER JOIN {node} current_node ON current_node.nid = %d + INNER JOIN {node} n ON n.vid = nr.vid AND n.status = 1 " . $filter_nodetypes . " + LEFT JOIN {node} translations ON current_node.tnid > 0 AND translations.tnid = current_node.tnid + WHERE n.tnid > 0 + AND ( + (current_node.tnid = 0 AND nr." . $db_info['columns']['nid']['column'] . " = current_node.nid) + OR + (current_node.tnid > 0 AND nr." . $db_info['columns']['nid']['column'] . " = translations.nid) + ) + "; + } else { $query = "SELECT n.nid, n.vid, n.title