Index: viewfield.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/viewfield/viewfield.module,v
retrieving revision 1.5
diff -u -F^function -r1.5 viewfield.module
--- viewfield.module	27 Aug 2008 13:16:39 -0000	1.5
+++ viewfield.module	2 Oct 2008 21:21:13 -0000
@@ -82,6 +82,13 @@ function viewfield_field_settings($op, $
           '#default_value' => $field['token_enabled'],
         );
       }
+
+      $form['allow_recursion'] = array(
+        '#type' => 'checkbox',
+        '#title' => t('Allow recursion'),
+        '#description' => t('Allow views to load the node containing the view. Enable this only if you really know what you\'re doing.'),
+        '#default_value' => $field['allow_recursion'],
+      );
       
       $form_state = NULL;
       $form['super_default_widget'] = array('#tree' => TRUE);
@@ -97,7 +104,7 @@ function viewfield_field_settings($op, $
       break;
       
     case 'save':
-      return array('allowed_views', 'super_default', 'token_enabled', 'super_default_widget');
+      return array('allowed_views', 'super_default', 'token_enabled', 'super_default_widget', 'allow_recursion');
       
     case 'database columns':
       $columns = array(
@@ -146,6 +153,8 @@ function viewfield_field($op, &$node, $f
           $items[$delta] = _viewfield_get_super_defaults($field);
           $items[$delta]['default'] = TRUE;
         }
+        // Keep the allow_recursion flag for later use.
+        $items[$delta]['allow_recursion'] = $field['allow_recursion'];
         // load here the actual arguments to avoid the body disappearing
         $items[$delta]['actual_vargs'] = _viewfield_get_view_args($field, $items[$delta][$field_key_vargs], $node);
         $adds[$field_name][$delta] = $items[$delta];
@@ -191,7 +200,7 @@ function theme_viewfield_formatter($elem
   $view_name = $element['#item']['vname'];
   $view_args = $element['#item']['actual_vargs'];
   
-  return _viewfield_get_view_content($view_name, $view_args, $display, $node);
+  return _viewfield_get_view_content($view_name, $view_args, $display, $node, $element['#item']['allow_recursion']);
 }
  
 
@@ -476,7 +485,7 @@ function _viewfield_get_token_help() {
 /**
  * Return a themed view avoiding viewfield recursion
  */
-function _viewfield_get_view_content($view_name, $view_args, $display, $node) {
+function _viewfield_get_view_content($view_name, $view_args, $display, $node, $allow_recursion) {
   global $_viewfield_stack;
   $output = '';
   
@@ -484,7 +493,7 @@ function _viewfield_get_view_content($vi
   if (!empty($view_name) && count($_viewfield_stack) <= 2) {
     // Need to prevent recursive views and node building, but don't need to do it on
     // new node previews.
-    if ($node->nid) {
+    if ($node->nid && !$allow_recursion) {
       _viewfield_nodestack_push($node->nid);
     }
     
@@ -494,7 +503,7 @@ function _viewfield_get_view_content($vi
     }
     
     // This node is "safe" again.
-    if ($node->nid) {
+    if ($node->nid && !$allow_recursion) {
       _viewfield_nodestack_pop();
     }
   }
