Index: modules/node.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/node.module,v
retrieving revision 1.610
diff -u -r1.610 node.module
--- modules/node.module	28 Feb 2006 21:10:04 -0000	1.610
+++ modules/node.module	1 Mar 2006 22:40:36 -0000
@@ -1493,19 +1493,35 @@
     $item = node_load($node->nid);
     $link = url("node/$node->nid", NULL, NULL, 1);
 
-    if ($item_length != 'title') {
-      $teaser = ($item_length == 'teaser') ? TRUE : FALSE;
+    // Allow the module to prepare an RSS specific teaser and body
+    if (node_hook($item, 'rss_item')) {
+      $extra = node_invoke($item, 'rss_item', $item_length);
+    }
+    else {
+      // If the modules doesn't care, fall back to hook_view().
+      if ($item_length != 'title') {
+        $teaser = ($item_length == 'teaser') ? TRUE : FALSE;
+
+        // Filter and prepare node teaser
+        if (node_hook($item, 'view')) {
+          node_invoke($item, 'view', $teaser, FALSE);
+        }
+        else {
+          $item = node_prepare($item, $teaser);
+        }
 
-      // Filter and prepare node teaser
-      if (node_hook($item, 'view')) {
-        node_invoke($item, 'view', $teaser, FALSE);
-      }
-      else {
-        $item = node_prepare($item, $teaser);
+        // Allow modules to change $node->teaser before viewing
+        node_invoke_nodeapi($item, 'view', $teaser, FALSE);
       }
+    }
 
-      // Allow modules to change $node->teaser before viewing.
-      node_invoke_nodeapi($item, 'view', $teaser, FALSE);
+    // Allow any other modules to supply extra information
+    $extra = array_merge($extra, node_invoke_nodeapi($item, 'rss item', $item_length));
+    $extra = array_merge($extra, array(array('key' => 'pubDate', 'value' =>  date('r', $item->created)), array('key' => 'dc:creator', 'value' => $item->name), array('key' => 'guid', 'value' => $item->nid . ' at ' . $base_url, 'attributes' => array('isPermaLink' => 'false'))));
+    foreach ($extra as $element) {
+      if ($element['namespace']) {
+        $namespaces = array_merge($namespaces, $element['namespace']);
+      }
     }
 
     // Prepare the item description
@@ -1524,14 +1540,6 @@
         break;
     }
 
-    // Allow modules to add additional item fields
-    $extra = node_invoke_nodeapi($item, 'rss item');
-    $extra = array_merge($extra, array(array('key' => 'pubDate', 'value' =>  date('r', $item->created)), array('key' => 'dc:creator', 'value' => $item->name), array('key' => 'guid', 'value' => $item->nid . ' at ' . $base_url, 'attributes' => array('isPermaLink' => 'false'))));
-    foreach ($extra as $element) {
-      if ($element['namespace']) {
-        $namespaces = array_merge($namespaces, $element['namespace']);
-      }
-    }
     $items .= format_rss_item($item->title, $link, $item_text, $extra);
   }
 

