--- webform.module.orig	Tue Oct 14 23:51:45 2008
+++ webform.module	Sat Oct 25 20:19:59 2008
@@ -96,7 +96,7 @@ function webform_menu($may_cache) {
   elseif (arg(0) == 'node' && is_numeric(arg(1))) {
     $nid = arg(1);
     $node = node_load($nid);
-    $sid = (arg(2) == 'submission' && is_numeric(arg(3))) ? arg(3) : NULL;
+    $sid = ((arg(2) == 'submission' || arg(2) == 'download_result') && is_numeric(arg(3))) ? arg(3) : NULL;
 
     if ($node->nid && $node->type == 'webform') {
       $items[] = array(
@@ -115,6 +115,14 @@ function webform_menu($may_cache) {
         'access' => node_access('view', $node),
         'type' => MENU_CALLBACK,
       );
+      $items[] = array(
+        'path' => 'node/'. $nid .'/download_result',
+        'title' => t('Webform special result'),
+        'callback' => 'webform_results',
+        'callback arguments' => array($node, 'reference', $sid),
+        'access' => node_access('view', $node),
+        'type' => MENU_CALLBACK,
+      );
       $items[] = array('path' => 'node/'. $nid .'/edit/configuration',
         'title' => t('Configuration'),
         'callback' => 'node_page_edit',
@@ -2007,7 +2015,7 @@ function webform_components($node, $cid = NULL, $op = 
 /**
  * Menu callback for all content under admin/content/webform.
  */
-function webform_results($node, $op = 'submissions') {
+function webform_results($node, $op = 'submissions', $sid = NULL) {
   include_once(drupal_get_path('module', 'webform') ."/webform_report.inc");
   include_once(drupal_get_path('module', 'webform') ."/webform_submissions.inc");
 
@@ -2022,6 +2030,8 @@ function webform_results($node, $op = 'submissions') {
       return webform_results_table($node);
     case 'download' :
       return drupal_get_form('webform_results_download_form', $node);
+    case 'reference' :
+      return drupal_get_form('webform_results_download_form', $node, $sid);
     case 'user_submissions':
       return webform_results_submissions($node, TRUE);
     case 'submissions':
--- webform_report.inc.orig	Wed Oct  8 21:51:44 2008
+++ webform_report.inc	Sat Oct 25 20:36:38 2008
@@ -41,7 +41,7 @@ function theme_webform_results_submissions_header($nod
     $columns[] = array('data' => t('User'), 'field' => 'name');
     $columns[] = array('data' => t('IP Address'), 'field' => 'remote_addr');
   }
-  $columns[] = array('data' => t('Operations'), 'colspan' => 3);
+  $columns[] = array('data' => t('Operations'), 'colspan' => 4);
 
   return $columns;
 }
@@ -73,10 +73,11 @@ function theme_webform_results_submissions($node, $sub
     $row[] = l(t('View'), "node/$node->nid/submission/$sid");
     if ((user_access("edit own webform submissions") && ($user->uid == $submission->uid)) || user_access("edit webform submissions")) {
       $row[] = l(t('Edit'), "node/$node->nid/submission/$sid/edit");
+      $row[] = l(t('Choose as ref'), "node/$node->nid/download_result/$sid");
       $row[] = l(t('Delete'), "node/$node->nid/submission/$sid/delete", NULL, drupal_get_destination());
     }
     else {
-      $row[count($row) - 1] = array('data' => $row[count($row) - 1], 'colspan' => 3);
+      $row[count($row) - 1] = array('data' => $row[count($row) - 1], 'colspan' => 4);
     }
     $rows[] = $row;
   }
@@ -212,7 +213,7 @@ function webform_results_clear_form_submit($form_id, $
 /**
  * Form to configure the download of CSV files.
  */
-function webform_results_download_form($node) {
+function webform_results_download_form($node, $ref = NULL) {
   include_once(drupal_get_path('module', 'webform') .'/webform_export.inc');
 
   $form = array();
@@ -221,6 +222,10 @@ function webform_results_download_form($node) {
     '#type' => 'value',
     '#value' => $node,
   );
+  $form['ref'] = array(
+    '#type' => 'value',
+    '#value' => $ref,
+  );
 
   $form['format'] = array(
     '#type' => 'radios',
@@ -254,7 +259,7 @@ function webform_results_download_form($node) {
 }
 
 function webform_results_download_form_submit($form_id, $form_values) {
-  webform_results_download($form_values['node'], $form_values['format'], $form_values);
+  webform_results_download($form_values['node'], $form_values['format'], $form_values['ref'], $form_values);
 }
 
 /**
@@ -289,7 +294,7 @@ function webform_results_download_form_submit($form_id
  *   27 Feb 2005       ,1035,56 ,212   ,X         ,        ,        ,..,       ,X          ,X       ,X       ,..,X       ,How is this?
  *
  */
-function webform_results_download($node, $format = 'delimiter', $options = array()) {
+function webform_results_download($node, $format = 'delimiter', $ref = NULL, $options = array()) {
   include_once(drupal_get_path('module', 'webform') .'/webform_export.inc');
 
   if (empty($options)) {
@@ -322,6 +327,11 @@ function webform_results_download($node, $format = 'de
       $header[2] = array_merge($header[2], (array)$component_header[2]);
     }
   }
+  if (!is_null($ref)) {
+    $header[0] = array_merge($header[2], array('', ''));
+    $header[1] = array_merge($header[2], array('', ''));
+    $header[2] = array_merge($header[2], array(t('answered'), t('good')));
+  }
 
   // Add headers to the file.
   foreach ($header as $row) {
@@ -334,6 +344,7 @@ function webform_results_download($node, $format = 'de
   // Generate a row for each submission.
   $row_count = 0;
   foreach ($submissions as $sid => $submission) {
+    $results = array(0, 0);
     $row = array();
     $row[] = ++$row_count;
     $row[] = $sid;
@@ -353,6 +364,15 @@ function webform_results_download($node, $format = 'de
           $row[] = $data;
         }
       }
+      if (!is_null($ref)) {
+	$csv_account_function = "_webform_csv_account_". $component['type'];
+	if (function_exists($csv_account_function)) {
+	  $results = $csv_account_function($results, $submission->data[$cid], $submissions[$ref]->data[$cid], $component);
+	}
+      }
+    }
+    if (!is_null($ref)) {
+      $row = array_merge($row, $results);
     }
     // Write data from submissions.
     $data = $exporter->add_row($handle, $row);
