From 22b25090b2791d3455b50c8493153bc4d428fbee Mon Sep 17 00:00:00 2001
From: dysrama <louisekummel@gmail.com>
Date: Fri, 19 Apr 2013 09:28:13 +0200
Subject: [PATCH] Issue #1688332 by dysrama: Support for views relationships

---
 ...ntityReference_SelectionHandler_Views.class.php | 24 +++++++++++++++++++++-
 views/entityreference_plugin_display.inc           | 15 +++++++++++---
 2 files changed, 35 insertions(+), 4 deletions(-)

diff --git a/plugins/selection/EntityReference_SelectionHandler_Views.class.php b/plugins/selection/EntityReference_SelectionHandler_Views.class.php
index 1b036a7..857f818 100644
--- a/plugins/selection/EntityReference_SelectionHandler_Views.class.php
+++ b/plugins/selection/EntityReference_SelectionHandler_Views.class.php
@@ -50,6 +50,24 @@ class EntityReference_SelectionHandler_Views implements EntityReference_Selectio
         '#default_value' => $default,
         '#description' => '<p>' . t('Choose the view and display that select the entities that can be referenced.<br />Only views with a display of type "Entity Reference" are eligible.') . '</p>',
       );
+      
+      $default = !empty($view_settings['base_field']) ? $view_settings['base_field'] : '';
+      $form['view']['base_field'] = array(
+        '#type' => 'textfield',
+        '#title' => t('The ID field if not nid'),
+        '#default_value' => $default,
+        '#required' => FALSE,
+        '#description' => t('Set ID to use'),
+      );
+      
+      $default = !empty($view_settings['base_table']) ? $view_settings['base_table'] : '';
+      $form['view']['base_table'] = array(
+        '#type' => 'textfield',
+        '#title' => t('The base table'),
+        '#default_value' => $default,
+        '#required' => FALSE,
+        '#description' => t('Set table to use when defining custom id'),
+      );
 
       $default = !empty($view_settings['args']) ? implode(', ', $view_settings['args']) : '';
       $form['view']['args'] = array(
@@ -76,6 +94,8 @@ class EntityReference_SelectionHandler_Views implements EntityReference_Selectio
     $display_name = $this->field['settings']['handler_settings']['view']['display_name'];
     $args = $this->field['settings']['handler_settings']['view']['args'];
     $entity_type = $this->field['settings']['target_type'];
+    $base_field = $this->field['settings']['handler_settings']['view']['base_field'];
+    $base_table = $this->field['settings']['handler_settings']['view']['base_table'];
 
     // Check that the view is valid and the display still exists.
     $this->view = views_get_view($view_name);
@@ -94,6 +114,8 @@ class EntityReference_SelectionHandler_Views implements EntityReference_Selectio
       'match_operator' => $match_operator,
       'limit' => $limit,
       'ids' => $ids,
+      'base_field' => $base_field,
+      'base_table' => $base_table,
     );
     $this->view->display_handler->set_option('entityreference_options', $entityreference_options);
     return TRUE;
@@ -188,6 +210,6 @@ function entityreference_view_settings_validate($element, &$form_state, $form) {
     $args = array_map('trim', explode(',', $args_string));
   }
 
-  $value = array('view_name' => $view, 'display_name' => $display, 'args' => $args);
+  $value = array('view_name' => $view, 'display_name' => $display, 'args' => $args, 'base_field' => $element['base_field']['#value'], 'base_table' => $element['base_table']['#value']);
   form_set_value($element, $value, $form_state);
 }
diff --git a/views/entityreference_plugin_display.inc b/views/entityreference_plugin_display.inc
index f13e88a..76c8847 100644
--- a/views/entityreference_plugin_display.inc
+++ b/views/entityreference_plugin_display.inc
@@ -56,9 +56,18 @@ class entityreference_plugin_display extends views_plugin_display {
 
     // Make sure the id field is included in the results, and save its alias
     // so that references_plugin_style can retrieve it.
-    $this->id_field_alias = $id_field = $this->view->query->add_field($this->view->base_table, $this->view->base_field);
-    if (strpos($id_field, '.') === FALSE) {
-      $id_field = $this->view->base_table . '.' . $this->id_field_alias;
+    if (!$options['base_field']) {
+      $this->id_field_alias = $id_field = $this->view->query->add_field($this->view->base_table, $this->view->base_field);
+      if (strpos($id_field, '.') === FALSE) {
+        $id_field = $this->view->base_table . '.' . $this->id_field_alias;
+      }
+    }
+    else {
+      $this->id_field_alias = $id_field = $this->view->query->add_field($options['base_table'], $options['base_field']);
+      
+      if (strpos($id_field, '.') === FALSE) {
+        $id_field = $options['base_table'] . '.' . $options['base_field'];
+      }
     }
 
     // Restrict the autocomplete options based on what's been typed already.
-- 
1.7.12.4 (Apple Git-37)

