Index: modules/poll/poll.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/poll/poll.module,v
retrieving revision 1.285
diff -u -p -r1.285 poll.module
--- modules/poll/poll.module	21 Jan 2009 14:42:16 -0000	1.285
+++ modules/poll/poll.module	21 Jan 2009 20:43:04 -0000
@@ -157,7 +157,7 @@ function poll_block_view($delta = '') {
     if ($record) {
       $poll = node_load($record->nid);
       if ($poll->nid) {
-        $poll = poll_view($poll, TRUE, FALSE, TRUE);
+        $poll = poll_view($poll, TRUE, TRUE);
       }
     }
     $block['subject'] = t('Poll');
@@ -188,7 +188,7 @@ function poll_node_info() {
       'base' => 'poll',
       'description' => t('A <em>poll</em> is a question with a set of possible responses. A <em>poll</em>, once created, automatically provides a simple running count of the number of votes received for each response.'),
       'title_label' => t('Question'),
-      'has_body' => FALSE,
+      'body_label' => t('Description'),
     )
   );
 }
@@ -212,9 +212,15 @@ function poll_form(&$node, $form_state) 
     '#title' => check_plain($type->title_label),
     '#required' => TRUE,
     '#default_value' => $node->title,
-    '#weight' => -5,
+    '#weight' => -6,
   );
 
+  if ($type->has_body) {
+    $form['body_field'] = node_body_field($node, $type->body_label, $type->min_word_count);
+    // Place the body field next to title.
+    $form['body_field']['#weight'] = -5;
+  }
+
   if (isset($form_state['choice_count'])) {
     $choice_count = $form_state['choice_count'];
   }
@@ -402,7 +408,6 @@ function poll_choice_js() {
 function poll_node_form_submit(&$form, &$form_state) {
   // Renumber fields
   $form_state['values']['choice'] = array_values($form_state['values']['choice']);
-  $form_state['values']['teaser'] = poll_teaser((object)$form_state['values']);
 }
 
 /**
@@ -542,34 +547,43 @@ function poll_view($node, $teaser = FALS
     $node->links = $links;
   }
 
+  // Include formatted body content.
+  $node = node_prepare($node, $teaser);
+
   if (!empty($node->allowvotes) && ($block || empty($node->show_results))) {
-    $node->content['body'] = array(
+    if ($block && count($node->body) > 1) {
+      $node->content['body'] = array(
+        '#markup' => '<div class="more-link">' . l(t('Read more'), "node/$node->nid") . '</div>',
+      );
+    }
+    $node->content['poll'] = array(
       '#markup' => drupal_get_form('poll_view_voting', $node, $block),
     );
   }
   else {
-    $node->content['body'] = array(
+    $node->content['poll'] = array(
       '#markup' => poll_view_results($node, $teaser, $block),
     );
   }
+
   return $node;
 }
 
 /**
- * Creates a simple teaser that lists all the choices.
+ * Implementation of hook_nodeapi_rss_item().
  *
- * This is primarily used for RSS.
+ * Prepends a lists of all the choices to teaser for use in RSS view.
  */
-function poll_teaser($node) {
-  $teaser = NULL;
+function poll_nodeapi_rss_item($node) {
+  $teaser = '';
   if (is_array($node->choice)) {
     foreach ($node->choice as $k => $choice) {
       if ($choice['chtext'] != '') {
-        $teaser .= '* ' . check_plain($choice['chtext']) . "\n";
+        $teaser .= '* ' . check_plain($choice['chtext']) . "<br />";
       }
     }
   }
-  return $teaser;
+  $node->teaser = $teaser . $node->teaser;
 }
 
 /**
