Index: contrib/forward/feedback-forward-email.tpl.php
===================================================================
--- contrib/forward/feedback-forward-email.tpl.php	(revision 0)
+++ contrib/forward/feedback-forward-email.tpl.php	(revision 0)
@@ -0,0 +1,81 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+  <head>
+  <style>
+  <!--
+  html, body {margin:0; padding:0; background-color:#fff;}
+  #container {margin:0 auto; width:670px; font:normal 10pt arial,helvetica,sans-serif;}
+  #header {width:670px; margin:0; text-align:center;}
+  #body {width:630px; margin:0; padding:5px 20px; text-align:left; background-color:#fff;}
+  .frm_title, .frm_txt {font-size:12pt;}
+  .frm_txt {padding-bottom:15px;}
+  
+  table {
+    border:1px solid #baaea2;
+  }
+  
+  th {
+    text-align: left;
+    padding-left: 0.5em;
+    padding-right: 1em;
+    border-bottom: 3px solid #ccc;
+  }
+  
+  td {
+    text-align: left;
+    padding:0.4em 1em 0.4em 0.5em;
+    border-right:1px dashed #cccccc;
+  }
+  
+  thead th {
+    text-align: left;
+    border:1px solid #baaea2;
+    font-weight:normal;
+    background-image:url(images/buttons/table-head-bg.png);
+    background-position: 0 -100%;
+    background-repeat:repeat-x;
+  }
+  
+  thead th {
+    background-color: #eae4df;
+    color:#333333;
+    border-right:1px dashed #949494;
+  }
+  
+  tbody th {
+    border-top: none;
+    border-bottom: none;
+    border-right:1px dashed #949494;
+    border-left:none;
+    color:#333333;
+    font-weight:normal;
+  }
+  
+  tbody tr.even th {
+    background-color: #eeeeee;
+  }
+  
+  tbody tr.odd th {
+    background-color: #dddddd;
+  }
+  
+  tbody tr.even td {
+    background-color: #ffffff;
+  }
+  
+  tbody tr.odd td {
+    background-color: #eeeeee;
+  }
+  -->
+  </style>
+    <base href="<?php print url('', array('absolute' => TRUE))?>" />
+  </head>
+  <body>
+    <div id="container">
+      <div id="body">
+        <div class="frm_txt"><?php print $vars['forward_message']?></div>
+        <div class="frm_txt"><p><b><?php  print $vars['message']; ?></b></p></div>
+      </div>
+    </div>
+  </body>
+</html>'
\ No newline at end of file
Index: contrib/forward/feedback_forward.info
===================================================================
--- contrib/forward/feedback_forward.info	(revision 0)
+++ contrib/forward/feedback_forward.info	(revision 0)
@@ -0,0 +1,5 @@
+; $Id: feedback.info,v 1.5 2008/10/15 08:23:30 sun Exp $
+name = Feedback Forward
+description = Allows site administrators to forward feedback messages to one or more email addresses.
+package = Development
+core = 6.x
\ No newline at end of file
Index: contrib/forward/feedback_forward.module
===================================================================
--- contrib/forward/feedback_forward.module	(revision 0)
+++ contrib/forward/feedback_forward.module	(revision 0)
@@ -0,0 +1,161 @@
+<?php
+// $Id: feedback_forward.module,v 1.72 2008/10/19 20:07:19 sun Exp $
+
+/**
+ * @file
+ * Allows site administrators to forward feedback messages to one or more email addresses.
+ */
+
+/**
+ * Implementation of hook_perm().
+ */
+function feedback_forward_perm() {
+  return array('forward feedback messages');
+}
+
+/**
+ * Implementation of hook_menu().
+ */
+function feedback_forward_menu() {
+  $items = array();
+  $items['admin/reports/feedback/forward/%feedback'] = array(
+    'title' => 'Forward feedback message',
+    'description' => 'Forward feedback message.',
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('feedback_forward_form', 4),
+    'access arguments' => array('forward feedback messages'),
+  );
+  return $items;
+}
+
+/**
+ * Implementation of hook_form_alter().
+ */
+function feedback_forward_form_alter(&$form, $form_state, $form_id) {
+  // Add the node-type settings option to activate the email this page link
+  if ($form_id == 'feedback_admin_view_form') {
+    $form['#feedback_header'][] = t('Forward');
+  }
+  foreach (element_children($form['feedback-messages-0']) as $element) { 
+    $item = &$form['feedback-messages-0'][$element];
+    $item['forward_link'] = array(
+      '#value' => l('Forward', 'admin/reports/feedback/forward/'. $element, array('title'=> 'Forward this feedback message', 'query' => drupal_get_destination())),
+    );
+  }
+}
+
+/**
+ * Form builder function for a user feedback form.
+ */
+function feedback_forward_form($form, $feedbacks) {
+  $form = array();
+  if ($feedbacks) {
+    $output = '';
+    foreach ($feedbacks as $feedback) {
+      $headers = array(t('Property'), t('Value'));
+      $rows[] = array(
+        array('data' => t('Location'), 'header' => TRUE, 'style' => 'text-align:right',),
+        l(truncate_utf8($feedback->location, 32, FALSE, TRUE), $feedback->location)
+      );
+      $rows[] = array(
+        array('data' => t('Date'), 'header' => TRUE, 'style' => 'text-align:right',),
+        format_date($feedback->timestamp, 'small')
+      );
+      $rows[] = array(
+        array('data' => t('User'), 'header' => TRUE, 'style' => 'text-align:right',),
+        theme('username', $feedback)
+      );
+      $rows[] = array(
+        array('data' => t('Message'), 'header' => TRUE, 'style' => 'text-align:right',),
+        feedback_format_message($feedback)
+      );
+      $output .= theme('table', $headers, $rows);
+      $form['message_markup'] = array(
+        '#value' => $output,
+      );
+      $form['user'] = array(
+        '#type' => 'hidden',
+        '#value' => theme('username', $feedback),
+      );
+      $form['date'] = array(
+        '#type' => 'hidden',
+        '#value' => format_date($feedback->timestamp, 'small')
+      );
+      $form['message'] = array(
+        '#type' => 'hidden',
+        '#value' => $output,
+      );
+    }
+  }
+  $form['email'] = array(
+    '#type' => 'textfield',
+    '#title' => 'Email address',
+    '#description' => 'Details of this feedback message will be e-mailed to this address. Multiple e-mail addresses may be separated by commas.',
+  );
+  $form['submit'] = array(
+    '#type' => 'submit',
+    '#value' => 'Send',
+  );
+  return $form;
+}
+
+/**
+ * Form validation.
+ */
+function feedback_forward_form_validate(&$form, $form_state) {
+  // Ensure the entered e-mail addresses are valid.
+  if (!empty($form_state['values']['email'])) {
+    $emails = explode(',', $form_state['values']['email']);
+    foreach ($emails as $email) {
+      if (!valid_email_address(trim($email))) {
+        form_set_error('email', t('The entered email address %address is not a valid address.', array('%address' => $email)));
+        break;
+      }
+    }
+  }
+}
+
+/**
+ * Form submission.
+ */
+function feedback_forward_form_submit(&$form, $form_state) {
+  global $base_url, $user;
+  $vars = array(
+    'site_name' => variable_get('site_name', 'Drupal'),
+    'forward_message' => t('Message:'),
+    'message' => $form_state['values']['message'],
+    'base_url' => $base_url,
+    'path' => 'path_here',
+    'dynamic_content' => 'dynamic_content',
+  );
+  $params['body'] = theme('feedback_forward_email', $vars);
+  $params['subject'] = t('!name has forwarded you site feedback from !site', array('!name' => $user->name, '!site' => variable_get('site_name', 'drupal')));
+  $params['from'] = $form_state['values']['email'];
+  $recipients = explode(',', $form_state['values']['email']);
+  foreach ($recipients as $to) {
+    drupal_mail('feedback_forward', 'feedback_forward', $to, language_default(), $params, $params['from']);
+  }
+}
+
+/**
+ * Implementation of hook_mail().
+ */
+function feedback_forward_mail($key, &$message, $params) {
+  $message['from'] .= $params['from'];
+  $message['subject'] .= $params['subject'];
+  $message['body'][] = $params['body'];
+  $message['headers']['MIME-Version'] = '1.0';
+  $message['headers']['Content-Type'] = 'text/html; charset=utf-8';
+}
+
+/**
+ * Implementation of hook_theme().
+ */
+function feedback_forward_theme() {
+  return array(
+    'feedback_forward_email' => array(
+      'arguments' => array('vars' => NULL),
+      'template' => 'feedback-forward-email',
+    ),
+  );
+}
\ No newline at end of file
Index: feedback.module
===================================================================
--- feedback.module	(revision 331)
+++ feedback.module	(working copy)
@@ -104,10 +104,10 @@
   );
   if (user_access('view feedback messages')) {
     if (arg(0) != 'node') {
-      $feedbacks = feedback_load(array('status' => 0, 'location_masked' => feedback_mask_path($_GET['q'])));
+      $feedbacks = feedback_load(NULL, array('status' => 0, 'location_masked' => feedback_mask_path($_GET['q'])));
     }
     else {
-      $feedbacks = feedback_load(array('status' => 0, 'location' => $_GET['q']));
+      $feedbacks = feedback_load(NULL, array('status' => 0, 'location' => $_GET['q']));
     }
     if ($feedbacks) {
       $rows = '';
@@ -171,10 +171,15 @@
 /**
  * Load feedback entries from the database.
  *
+ * @param $fid
+ *   An optional fid of a specific feedback message to load.
  * @param $array
  *   A keyed array of optional where clause conditions.
  */
-function feedback_load($array) {
+function feedback_load($fid = NULL, $array = array()) {
+  if ($fid) {
+    $array['fid'] = $fid;
+  }
   $where = $args = array();
   if (!empty($array)) {
     foreach ($array as $column => $value) {
@@ -301,15 +306,13 @@
     // Build the table.
     $rows = array();
     foreach (element_children($item) as $element_entry) {
+      //die(dpr($element_entry));
       $entry = &$item[$element_entry];
       // Render the data first.
-      $rows[] = array(
-        0,
-        drupal_render($entry['location']),
-        drupal_render($entry['date']),
-        drupal_render($entry['user']),
-        drupal_render($entry['message']),
-      );
+      $rows[] = array(0);
+      foreach (element_children($entry) as $column) {
+        $rows[count($rows) - 1][] = drupal_render($entry[$column]);
+      }
       // Render the checkbox.
       $rows[count($rows) - 1][0] = drupal_render($entry);
     }
