From 56ef6f8140c3e83de104a35db91a48d3497509de Mon Sep 17 00:00:00 2001
From: Matt Corks <matt+git@koumbit.org>
Date: Wed, 14 Sep 2011 20:03:43 -0400
Subject: [PATCH] Issue #1054982: use i18n_selection_mode()

---
 nodereferrer.module |   44 +++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 43 insertions(+), 1 deletions(-)

diff --git a/nodereferrer.module b/nodereferrer.module
index 618f7d6..e800c6a 100644
--- a/nodereferrer.module
+++ b/nodereferrer.module
@@ -129,13 +129,28 @@ function nodereferrer_field_settings($op, $field) {
  * Implementation of hook_field().
  */
 function nodereferrer_field($op, &$node, $field, &$items, $teaser, $page) {
+  static $function_exists_i18n_selection_mode;
+  if (!isset($function_exists_i18n_selection_mode)) {
+    $function_exists_i18n_selection_mode = function_exists('i18n_selection_mode') ? TRUE : FALSE;
+  }
   switch ($op) {
     case 'load':
       $types = isset($field['referrer_types']) ? array_values(array_filter($field['referrer_types'])) : array();
       $fields = isset($field['referrer_fields']) ? array_values(array_filter($field['referrer_fields'])) : array();
       $order = $field['referrer_order'];
       $translations = isset($field['referrer_translations']) ? $field['referrer_translations'] : 0;
+      if ($function_exists_i18n_selection_mode) {
+        if ($node->language) {
+          i18n_selection_mode('node', $node->language);
+        }
+        else {
+          i18n_selection_mode('off');
+        }
+      }
       $values = nodereferrer_referrers($node->nid, $fields, $types, $translations, $order);
+      if ($function_exists_i18n_selection_mode) {
+        i18n_selection_mode('reset');
+      }
       // Pass referring node objects into CCK content_load() cache. 24/08/2006 sun
       $items = array();
       foreach ($values as $nid => $rnode) {
@@ -163,7 +178,19 @@ function nodereferrer_field($op, &$node, $field, &$items, $teaser, $page) {
 
       // clear any modules referring to me as my title or other data may change.
       // and nodereference doesn't clear the cache yet.
-      foreach (nodereferrer_referrers($node->nid, $fields, $types, false) as $delta => $item) {
+      if ($function_exists_i18n_selection_mode) {
+        if ($node->language) {
+          i18n_selection_mode('node', $node->language);
+        }
+        else {
+          i18n_selection_mode('off');
+        }
+      }
+      $values = nodereferrer_referrers($node->nid, $fields, $types, false);
+      if ($function_exists_i18n_selection_mode) {
+        i18n_selection_mode('reset');
+      }
+      foreach ($values as $delta => $item) {
         $cid = 'content:' . $item['nid'] . ':' . $item['vid'];
         cache_clear_all($cid, 'cache_page');
       }
@@ -463,6 +490,10 @@ function nodereferrer_nodereference_field_options() {
  * Implementation of hook_nodeapi().
  */
 function nodereferrer_nodeapi($node, $op) {
+  static $function_exists_i18n_selection_mode;
+  if (!isset($function_exists_i18n_selection_mode)) {
+    $function_exists_i18n_selection_mode = function_exists('i18n_selection_mode') ? TRUE : FALSE;
+  }
   switch ($op) {
     case 'prepare':
     case 'insert':
@@ -489,7 +520,18 @@ function nodereferrer_nodeapi($node, $op) {
       // updated. @note this currenlty doesn't work all that well since nodereference
       // doesn't respect publishing states or access control.
       if (isset($node->nid)) {
+        if ($function_exists_i18n_selection_mode) {
+          if ($node->language) {
+            i18n_selection_mode('node', $node->language);
+          }
+          else {
+            i18n_selection_mode('off');
+          }
+        }
         $referrers = nodereferrer_referrers($node->nid);
+        if ($function_exists_i18n_selection_mode) {
+          i18n_selection_mode('reset');
+        }
         $referrer_nids = array_keys($referrers);
         $nids = array_merge($nids, $referrer_nids);
       }
-- 
1.7.4.1

