From d8e01aefd03c2a37af2fee386b511f0e99d12282 Mon Sep 17 00:00:00 2001
From: Alexander Fecke <mail@alexfecke.de>
Date: Thu, 15 May 2014 22:33:05 +0200
Subject: [PATCH] Issue #1688332 by dysrama: Support for views relationships

---
 ...ntityReference_SelectionHandler_Views.class.php | 35 +++++++++++++++++++++-
 views/entityreference_plugin_style.inc             |  7 ++++-
 2 files changed, 40 insertions(+), 2 deletions(-)

diff --git a/plugins/selection/EntityReference_SelectionHandler_Views.class.php b/plugins/selection/EntityReference_SelectionHandler_Views.class.php
index 1b036a7..7eb843a 100644
--- a/plugins/selection/EntityReference_SelectionHandler_Views.class.php
+++ b/plugins/selection/EntityReference_SelectionHandler_Views.class.php
@@ -50,6 +50,33 @@ 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['field_alias_key']) ? $view_settings['field_alias_key'] : '';
+      $form['view']['field_alias_key'] = array(
+        '#type' => 'textfield',
+        '#title' => t('Field alias key'),
+        '#default_value' => $default,
+        '#required' => FALSE,
+        '#description' => t('Define the field alias key, which will be used to differentiate results.'),
+      );
 
       $default = !empty($view_settings['args']) ? implode(', ', $view_settings['args']) : '';
       $form['view']['args'] = array(
@@ -76,6 +103,9 @@ 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'];
+    $field_alias_key = $this->field['settings']['handler_settings']['view']['field_alias_key'];
 
     // Check that the view is valid and the display still exists.
     $this->view = views_get_view($view_name);
@@ -94,6 +124,9 @@ class EntityReference_SelectionHandler_Views implements EntityReference_Selectio
       'match_operator' => $match_operator,
       'limit' => $limit,
       'ids' => $ids,
+      'base_field' => $base_field,
+      'base_table' => $base_table,
+      'field_alias_key' => $field_alias_key,
     );
     $this->view->display_handler->set_option('entityreference_options', $entityreference_options);
     return TRUE;
@@ -188,6 +221,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'], 'field_alias_key' => $element['field_alias_key']['#value']);
   form_set_value($element, $value, $form_state);
 }
diff --git a/views/entityreference_plugin_style.inc b/views/entityreference_plugin_style.inc
index fadaa9e..d1048d8 100644
--- a/views/entityreference_plugin_style.inc
+++ b/views/entityreference_plugin_style.inc
@@ -46,7 +46,12 @@ class entityreference_plugin_style extends views_plugin_style {
     // Group the rows according to the grouping field, if specified.
     $sets = $this->render_grouping($this->view->result, $this->options['grouping']);
     // Grab the alias of the 'id' field added by entityreference_plugin_display.
-    $id_field_alias = $this->display->handler->id_field_alias;
+    if(!$options['field_alias_key']) {
+      $id_field_alias = $this->display->handler->id_field_alias;
+    }
+    else {
+      $id_field_alias = $options['field_alias_key'];
+    }
 
     // @todo We don't display grouping info for now. Could be useful for select
     // widget, though.
-- 
1.8.5.2 (Apple Git-48)

