From fafa7112ca5f0f6afadb747e7223496578de4cdf Mon Sep 17 00:00:00 2001
From: Helal Ferrari Cabral <ferrari.work@gmail.com>
Date: Wed, 10 Jul 2013 19:48:54 -0300
Subject: [PATCH] Issue #1328602 by Ferrari: Added compatibility with i18n
 module.

---
 .../nodequeue_handler_relationship_nodequeue.inc   | 56 +++++++++++++++-------
 1 file changed, 39 insertions(+), 17 deletions(-)

diff --git a/includes/views/nodequeue_handler_relationship_nodequeue.inc b/includes/views/nodequeue_handler_relationship_nodequeue.inc
index 50f4a39..ce3437f 100644
--- a/includes/views/nodequeue_handler_relationship_nodequeue.inc
+++ b/includes/views/nodequeue_handler_relationship_nodequeue.inc
@@ -16,9 +16,7 @@ class nodequeue_handler_relationship_nodequeue extends views_handler_relationshi
     if (!empty($options['qids'])) {
       $map = array_flip(nodequeue_get_qid_map());
       foreach ($options['qids'] as $key => $value) {
-        if ($value) {
-          $this->options['names'][$map[$key]] = ($value) ? $map[$key] : 0;
-        }
+        $this->options['names'][$map[$key]] = ($value) ? $map[$key] : 0;
       }
       unset($this->options['qids']);
     }
@@ -64,29 +62,19 @@ class nodequeue_handler_relationship_nodequeue extends views_handler_relationshi
   }
 
   /**
-   * Validate the options form.
-   */
-  function options_validate(&$form, &$form_state) {
-    parent::options_validate($form, $form_state);
-
-    // Check that at least on queue has been selected.
-    $options = $form_state['values']['options'];
-    if($options['limit'] && empty($options['names'])) {
-      form_set_error('names', t('You must check at least one queue.'));
-    }
-  }
-
-  /**
    * Called to implement a relationship in a query.
    */
   function query() {
+
+    global $language;
+
     // Figure out what base table this relationship brings to the party.
     $join = new views_join();
+
     $join->definition = array(
       'table' => 'nodequeue_nodes',
       'field' => 'nid',
       'left_table' => 'node',
-      'left_field' => 'nid',
     );
 
     if (!empty($this->options['required'])) {
@@ -109,8 +97,42 @@ class nodequeue_handler_relationship_nodequeue extends views_handler_relationshi
       ));
     }
 
+    $join->definition['left_field'] = $this->i18n_set_in_query(current($qids)) ? 'tnid' : 'nid';
+
     $join->construct();
     $alias = $join->definition['table'] . '_' . $join->definition['left_table'];
     $this->alias = $this->query->add_relationship($alias, $join, 'nodequeue_nodes', $this->relationship);
   }
+
+  private function i18n_set_in_query($qid) {
+
+    global $language;
+
+    $nodequeue = nodequeue_load($qid);
+
+    if (isset($nodequeue->i18n) && $nodequeue->i18n == TRUE) {
+
+      $this->query->where = array(
+        array(
+          'conditions' => array(
+            array(
+              'field' => 'node.language',
+              'value' => array(
+                $language->language
+              ),
+              'operator' => 'IN'
+            ),
+          ),
+          'args' => array(),
+          'type' => 'AND',
+        )
+      );
+
+      return TRUE;
+    }
+    else {
+
+      return FALSE;
+    }
+  }
 }
-- 
1.8.2.3

