Index: modules/node/node.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/node/node.module,v
retrieving revision 1.783
diff -u -p -r1.783 node.module
--- modules/node/node.module	15 Feb 2007 11:40:18 -0000	1.783
+++ modules/node/node.module	23 Feb 2007 00:24:28 -0000
@@ -2150,44 +2150,44 @@ function node_add($type = NULL) {
  * Generate a node preview.
  */
 function node_preview($node) {
-  if (node_access('create', $node) || node_access('update', $node)) {
-    // Load the user's name when needed:
-    if (isset($node->name)) {
-      // The use of isset() is mandatory in the context of user IDs, because
-      // user ID 0 denotes the anonymous user.
-      if ($user = user_load(array('name' => $node->name))) {
-        $node->uid = $user->uid;
-        $node->picture = $user->picture;
+
+  if (!form_get_errors()) {
+    // Previewing alters $node so it needs to be cloned.
+    $cloned_node = drupal_clone($node);
+
+    // Load the author's information :
+    if (isset($cloned_node->name)) {
+      if ($user = user_load(array('name' => $cloned_node->name))) {
+        $cloned_node->uid = $user->uid;
+        $cloned_node->picture = $user->picture;
       }
       else {
-        $node->uid = 0; // anonymous user
+        $cloned_node->uid = 0; // anonymous user
       }
     }
-    else if ($node->uid) {
-      $user = user_load(array('uid' => $node->uid));
-      $node->name = $user->name;
-      $node->picture = $user->picture;
+    elseif ($cloned_node->uid) {
+      $user = user_load(array('uid' => $cloned_node->uid));
+      $cloned_node->name = $user->name;
+      $cloned_node->picture = $user->picture;
     }
 
     // Set the timestamps when needed:
-    if ($node->date) {
-      $node->created = strtotime($node->date);
+    if ($cloned_node->date) {
+      $cloned_node->created = strtotime($cloned_node->date);
     }
-    $node->changed = time();
+    $cloned_node->changed = time();
 
     // Extract a teaser, if it hasn't been set (e.g. by a module-provided
     // 'teaser' form item).
-    if (!isset($node->teaser)) {
-      $node->teaser = node_teaser($node->body, $node->format);
+    if (!isset($cloned_node->teaser)) {
+      $cloned_node->teaser = node_teaser($cloned_node->body, $cloned_node->format);
     }
 
-    // Display a preview of the node:
-    // Previewing alters $node so it needs to be cloned.
-    if (!form_get_errors()) {
-      $cloned_node = drupal_clone($node);
-      $cloned_node->in_preview = TRUE;
-      $output = theme('node_preview', $cloned_node);
-    }
+    $cloned_node->in_preview = TRUE;
+    node_invoke($cloned_node, 'submit');
+    node_invoke_nodeapi($cloned_node, 'submit');
+    $output = theme('node_preview', $cloned_node);
+
     drupal_set_title(t('Preview'));
     drupal_set_breadcrumb(array(l(t('Home'), NULL), l(t('Create content'), 'node/add'), l(t('Submit @name', array('@name' => node_get_types('name', $node))), 'node/add/'. $node->type)));
 
Index: modules/poll/poll.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/poll/poll.module,v
retrieving revision 1.224
diff -u -p -r1.224 poll.module
--- modules/poll/poll.module	11 Feb 2007 09:30:51 -0000	1.224
+++ modules/poll/poll.module	23 Feb 2007 00:24:29 -0000
@@ -85,7 +85,9 @@ function poll_delete($node) {
 function poll_submit(&$node) {
   // Renumber fields
   $node->choice = array_values($node->choice);
-  $node->teaser = poll_teaser($node);
+  if (empty($node->in_preview)) {
+    $node->teaser = poll_teaser($node);
+  }
 }
 
 /**
