? a.patch
? nf_relationships.patch
Index: views/nodereferrer.views.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/nodereferrer/views/nodereferrer.views.inc,v
retrieving revision 1.1
diff -u -p -r1.1 nodereferrer.views.inc
--- views/nodereferrer.views.inc	5 Mar 2009 03:51:08 -0000	1.1
+++ views/nodereferrer.views.inc	17 Jun 2009 14:39:08 -0000
@@ -17,7 +17,7 @@ function nodereferrer_views_data_alter(&
       'handler' => 'nodereferrer_view_handler_field_field',
     ),
   );
-  
+
   $cache['node']['nodereferrer_type'] = array(
     'group' => t('Node'),
     'title' => t('Nodereferrer: by node type'),
@@ -33,6 +33,20 @@ function nodereferrer_views_data_alter(&
       'handler' => 'nodereferrer_view_handler_field_type',
     ),
   );
+
+  $cache['node']['nodereferer_referers'] = array(
+    'group' => t('Node'),
+    'relationship' => array(
+      'title' => t('Referrers'),
+      'label' => t('Referencing Nodes'),
+      'help' => t('Add a relationship to gain access to referencing nodes.'),
+      'relationship table' => 'node',
+      'relationship field' => 'nid',
+      'base' => 'node',
+      'field' => 'nid',
+      'handler' => 'nodereferrer_view_handler_relationship',
+    ),
+  );
 }
 
 /**
@@ -71,6 +85,9 @@ function nodereferrer_views_handlers() {
       'nodereferrer_view_handler_field_type' => array(
         'parent' => 'nodereferrer_view_handler_field',
       ),
+      'nodereferrer_view_handler_relationship' => array(
+        'parent' => 'views_handler_relationship',
+      ),
     ),
   );
 }
@@ -83,9 +100,9 @@ function nodereferrer_referrers_with_tra
   if (!module_exists('translation')) {
     return nodereferrer_referrers($nid, $fields, $types);
   }
-  
+
   $ref = nodereferrer_referrers($nid, $fields, $types, $ref_of_trans);
-  
+
   if ($trans_of_ref && count($ref)) {
     $in = implode(',', array_keys($ref));
     $query = "SELECT node2.nid, node2.vid, node2.title
@@ -101,7 +118,7 @@ function nodereferrer_referrers_with_tra
       $ref[$value['nid']] = $value;
     }
   }
-  
+
   return $ref;
 }
 
Index: views/nodereferrer_view_handler_relationship.inc
===================================================================
RCS file: views/nodereferrer_view_handler_relationship.inc
diff -N views/nodereferrer_view_handler_relationship.inc
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ views/nodereferrer_view_handler_relationship.inc	17 Jun 2009 14:39:08 -0000
@@ -0,0 +1,75 @@
+<?php
+// $Id$
+
+class nodereferrer_view_handler_relationship extends views_handler_relationship {
+  var $content_field;
+
+  function construct() {
+    parent::construct();
+
+    if (isset($this->definition['content_field_name'])) {
+    	$this->content_field = content_fields($this->definition['content_field_name']);
+    }
+  }
+
+  function option_definition() {
+    $options = parent::option_definition();
+
+    $options['referrer_delta'] = array('default' => -1);
+    $options['referrer_field'] = '';
+
+    return $options;
+  }
+
+  function options_form(&$form, &$form_state) {
+    parent::options_form($form, $form_state);
+
+    $form['referrer_field'] = array(
+      '#type' => 'select',
+      '#title' => t('Using field'),
+      '#options' => nodereferrer_nodereference_field_options(),
+      '#default_value' => empty($this->options['referrer_field']) ? array() : $this->options['referrer_field'],
+    );
+
+    $options = array('-1' => t('All'));
+    for ($i = 0; $i < 10; $i++) {
+      $options[$i] = $i + 1;
+    }
+    $form['referrer_delta'] = array(
+      '#type' => 'select',
+      '#options' => $options,
+      '#default_value' => $this->options['referrer_delta'],
+      '#title' => t('Delta'),
+      '#description' => t('The delta allows you to select which item in a multiple value field to key the relationship off of. Select "1" to use the first item, "2" for the second item, and so on. If you select "All", each item in the field will create a new row, which may appear to cause duplicates.'),
+    );
+  }
+
+  function ensure_my_table() {
+    if (!isset($this->table_alias)) {
+      $fieldname = $this->options['referrer_field'];
+      $field = content_fields($fieldname);
+
+      $db_info = content_database_info($field);
+
+      $join = new views_join();
+      $join->construct($db_info['table'], 'node', 'nid', $db_info['columns']['nid']['column']);
+
+      // Add delta condition.
+      if (!isset($join->extra)) {
+        $join->extra = array();
+      }
+      $delta = isset($this->options['referrer_delta']) ? $this->options['referrer_delta'] : -1;
+      if ($delta != -1) {
+        $join->extra[] = array(
+          'field' => 'delta',
+          'value' => $delta,
+          'numeric' => TRUE,
+        );
+      }
+
+      $this->table_alias = $this->query->add_table($this->table, $this->relationship, $join);
+    }
+
+    return $this->table_alias;
+  }
+}
