? tablefield.patch
Index: tablefield.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/tablefield/tablefield.module,v
retrieving revision 1.6
diff -u -p -r1.6 tablefield.module
--- tablefield.module	29 Mar 2010 15:44:01 -0000	1.6
+++ tablefield.module	16 Apr 2010 14:11:25 -0000
@@ -24,6 +24,7 @@ function tablefield_theme() {
     ),
     'tablefield_view' => array(
       'arguments' => array(
+        'table_name' => NULL,
         'header' => NULL,
         'rows' => NULL,
       ),
@@ -114,17 +115,20 @@ function tablefield_field($op, &$node, $
       foreach ($items as $delta => $table) {
         if (!empty($table['tablefield'])) {
           $tabledata = tablefield_rationalize_table($table['tablefield']);
+          $table_name = $table['tablefield']['table_name'];
         }
         elseif (!empty($table['value'])) {
-          $tabledata = tablefield_rationalize_table(unserialize($table['value']));
+          $unser_data = unserialize($table['value']);
+          $tabledata = tablefield_rationalize_table($unser_data);
+          $table_name = $unser_data['table_name'];
         }
-    
-        // Multivalue fields will have one row in the db, so make sure that it isn't empty 
+
+        // Multivalue fields will have one row in the db, so make sure that it isn't empty
         if (isset($tabledata)) {
           // Pull the header for theming
           $header = $tabledata[0];
           unset($tabledata[0]);
-  
+
           // Run it through input filters
           if (!empty($tabledata)) {
             foreach ($tabledata as $row_key => $row) {
@@ -139,7 +143,7 @@ function tablefield_field($op, &$node, $
             }
           }
 
-          $items[$delta]['value'] = theme('tablefield_view', $header, $tabledata, $node->nid, $delta);
+          $items[$delta]['value'] = theme('tablefield_view', $table_name, $header, $tabledata, $node->nid, $delta);
         }
       }
 
@@ -155,6 +159,7 @@ function tablefield_content_is_empty($it
   unset($item['tablefield']['count_cols']);
   unset($item['tablefield']['count_rows']);
   unset($item['tablefield']['rebuild']);
+  unset($item['tablefield']['table_name']);
   if (!empty($item['tablefield'])) {
     foreach ($item['tablefield'] as $cell) {
       if (!empty($cell)) {
@@ -172,32 +177,32 @@ function tablefield_content_is_empty($it
 function tablefield_field_formatter_info() {
   return array(
     'default' => array(
-      'label' => t('Tabular View'), 
-      'multiple values' => CONTENT_HANDLE_CORE, 
+      'label' => t('Tabular View'),
+      'multiple values' => CONTENT_HANDLE_CORE,
       'field types' => array('tablefield'),
     ),
-  ); 
+  );
 }
 
 /**
- * Theme function for default table display 
+ * Theme function for default table display
  */
 function theme_tablefield_formatter_default($element) {
   return $element['#item']['value'];
 }
 
 /**
- * Theme function for form display 
+ * Theme function for form display
  */
 function theme_tablefield($element) {
   return $element['#children'];
 }
 
 /**
- * Theme function for table view 
+ * Theme function for table view
  */
-function theme_tablefield_view($header, $rows, $nid, $delta) {
-  return '<div id="tablefield-wrapper-' . $nid . '-' . $delta . '" class="tablefield-wrapper">' . theme('table', $header, $rows, array('id' => 'tablefield-' . $nid . '-' . $delta, 'class' => 'tablefield')) . '</div>';
+function theme_tablefield_view($table_name, $header, $rows, $nid, $delta) {
+  return '<div id="tablefield-wrapper-' . $nid . '-' . $delta . '" class="tablefield-wrapper"><span class="tablefield-tablename">' . $table_name . '</span>' . theme('table', $header, $rows, array('id' => 'tablefield-' . $nid . '-' . $delta, 'class' => 'tablefield')) . '</div>';
 }
 
 /**
@@ -280,6 +285,7 @@ function tablefield_process($element, $e
   if (isset($element['#value']['tablefield'])) {
     // A form was submitted
     $default_value = tablefield_rationalize_table($element['#value']['tablefield']);
+    $table_name = $element['#value']['tablefield']['table_name'];
 
     // Catch empty form sumissions for required tablefields
     if ($form_state['submitted'] && $element['#required'] && tablefield_content_is_empty($element['#value'], $field)) {
@@ -288,7 +294,9 @@ function tablefield_process($element, $e
   }
   elseif (isset($element['#default_value']['value'])) {
     // Default from database
-    $default_value = tablefield_rationalize_table(unserialize($element['#default_value']['value']));
+    $unser_data = unserialize($element['#default_value']['value']);
+    $default_value = tablefield_rationalize_table($unser_data);
+    $table_name = $unser_data['table_name'];
   }
   else {
     // Get the widget default value
@@ -324,7 +332,7 @@ function tablefield_process($element, $e
     foreach ($default_value as $row) {
       $temp_count = count($row);
       if ($temp_count > $count_cols) {
-        $count_cols = $temp_count; 
+        $count_cols = $temp_count;
       }
     }
   }
@@ -342,9 +350,17 @@ function tablefield_process($element, $e
   }
 
   // Render the form table
-  $element['tablefield']['break' . $i] = array(
-    '#type' => 'markup',
-    '#value' => '<table>',
+  // Allow the user to specify a Name for the table
+  $element['tablefield']['table_name'] = array(
+    '#title' => t('Name'),
+    '#type' => 'textfield',
+    '#size' => 20,
+    '#prefix' => '<div class="clear-block">',
+    '#suffix' => '</div>',
+    '#value' => $table_name,
+);
+  $element['tablefield']['start_table'] = array(
+      '#value' => '<table>',
   );
   for ($i = 0; $i < $count_rows; $i++) {
     $element['tablefield']['break' . $i] = array(
@@ -361,14 +377,13 @@ function tablefield_process($element, $e
         '#suffix' => '</td>',
       );
     }
-    $element['tablefield']['break' . $i] = array(
+    $element['tablefield']['break' . ($i + 1)] = array(
       '#type' => 'markup',
       '#value' => '</tr>',
     );
   }
-  $element['tablefield']['break' . $i] = array(
-    '#type' => 'markup',
-    '#value' => '</table>',
+  $element['tablefield']['end_table'] = array(
+      '#value' => '</table>',
   );
 
   // Allow the user to add more rows/columns
@@ -412,6 +427,7 @@ function tablefield_rationalize_table($t
   $count_rows = $tablefield['count_rows'];
   unset($tablefield['count_rows']);
   unset($tablefield['rebuild']);
+  unset($tablefield['table_name']);
   // Rationalize the table data
   if (!empty($tablefield)) {
   foreach ($tablefield as $key => $value) {
