? cck/.settings
? cck/examples
? cck/po
? cck/tests
? cck/theme
? cck/translations
Index: cck/nodereference.module
===================================================================
RCS file: /cvs/drupal/contributions/modules/cck/Attic/nodereference.module,v
retrieving revision 1.39.2.29
diff -u -u -p -r1.39.2.29 nodereference.module
--- cck/nodereference.module	15 Aug 2007 19:05:53 -0000	1.39.2.29
+++ cck/nodereference.module	23 Jun 2008 04:03:29 -0000
@@ -286,7 +286,13 @@ function nodereference_widget($op, &$nod
         foreach ($items as $delta => $item) {
           if (!empty($items[$delta]['nid'])) {
             $items[$delta]['default node_name'] = db_result(db_query(db_rewrite_sql('SELECT n.title FROM {node} n WHERE n.nid = %d'), $items[$delta]['nid']));
-            $items[$delta]['default node_name'] .= ' [nid:'. $items[$delta]['nid'] .']';
+            if(! empty($items[$delta]['default node_name'])) {
+              // If we failed to retrieve the title, the target is probably dead. Remove it from the UI, for convenience
+              $items[$delta]['default node_name'] .= ' [nid:'. $items[$delta]['nid'] .']';
+            }
+            else {
+              unset($items[$delta]);
+            }
           }
         }
         break;
@@ -471,6 +477,24 @@ function _nodereference_potential_refere
 }
 
 /**
+ * Ensure that pointers are not left dangling when a nodereference target is
+ * deleted.
+ * Going straight at the Database because I can't see any API for this type of
+ * housekeeping.
+ */
+function nodereference_nodeapi(&$node, $op, $teaser, $page) {
+  switch ($op) {
+    case 'delete' :
+      $nodereferences = db_query("SELECT field_name FROM {node_field} WHERE type='nodereference'; ");
+      // Find all possible nodereference types, and wipe all uses that mention this node
+      foreach (db_fetch_object($nodereferences) as $nodereference ) {
+        db_query('DELETE FROM content_%s WHERE %s_nid = %d', $nodereference->field_name, $nodereference->field_name, $node->nid);
+      }
+  }
+}
+
+
+/**
  * Retrieve a pipe delimited string of autocomplete suggestions
  */
 function nodereference_autocomplete($field_name, $string = '') {
