commit be73f587d110c39d77a0b9754859cb7d11eafeab (HEAD, columns)
Author: Tim Plunkett <git@plnktt.com>
Date:   Wed Aug 24 14:29:46 2011 +0100

    Issue #1257526 by tim.plunkett: Exclude column from table if no items have content.

diff --git a/field_collection_table.install b/field_collection_table.install
index 66c7708..26f8222 100644
--- a/field_collection_table.install
+++ b/field_collection_table.install
@@ -10,4 +10,5 @@
  */
 function field_collection_table_uninstall() {
   variable_del('field_collection_table_format_form');
+  variable_del('field_collection_table_hide_empty');
 }
diff --git a/field_collection_table.module b/field_collection_table.module
index 12e167c..46b179e 100644
--- a/field_collection_table.module
+++ b/field_collection_table.module
@@ -77,7 +77,10 @@ function field_collection_table_field_formatter_view($entity_type, $entity, $fie
             $content[$field_name]['#label_display'] = 'hidden';
           }
           else {
-            $content[$field_name] = '<span class="empty_field"></span>';
+            $content[$field_name] = array(
+              '#markup' => '<span class="empty_field"></span>',
+              '#empty' => TRUE,
+            );
           }
           $column[] = array(
             'data' => $content[$field_name],
@@ -117,6 +120,7 @@ function field_collection_table_field_formatter_view($entity_type, $entity, $fie
           'data' => $column,
           'class' => array('field_collection_item'),
         );
+        $rows['#module'] = 'field_collection_table';
       }
 
       $element[0] = array(
@@ -366,3 +370,39 @@ function field_collection_table_entity_view($entity, $type, $view_mode, $langcod
     $entity->content['#pre_render'][] = 'field_collection_table_pre_render_field';
   }
 }
+
+function field_collection_table_preprocess_table(&$variables) {
+  $rows = $variables['rows'];
+
+  if (isset($rows['#module'])) {
+    unset($variables['rows']['#module']);
+    if ($rows['#module'] != 'field_collection_table') {
+      return;
+    }
+    unset($rows['#module']);
+  }
+
+  if (!variable_get('field_collection_table_hide_empty', FALSE)) {
+    return;
+  }
+
+  $count = array();
+  foreach ($rows as $row_delta => $row) {
+    foreach ($row['data'] as $column_delta => $column) {
+      if (!isset($count[$column_delta])) {
+        $count[$column_delta] = 0;
+      }
+      if (isset($column['data']['#empty'])) {
+        $count[$column_delta]++;
+      }
+    }
+  }
+  foreach ($count as $column_delta) {
+    if ($column_delta === count($rows)) {
+      foreach ($rows as $row_delta => $row) {
+        unset($variables['rows'][$row_delta]['data'][$column_delta]);
+        unset($variables['header'][$column_delta]);
+      }
+    }
+  }
+}
diff --git a/includes/field_collection_table.admin.inc b/includes/field_collection_table.admin.inc
index 0280a39..ac55fa6 100644
--- a/includes/field_collection_table.admin.inc
+++ b/includes/field_collection_table.admin.inc
@@ -15,6 +15,12 @@ function field_collection_table_admin_settings() {
     '#description' => t('If checked, all Field Collection forms will be formatted as tables.'),
     '#default_value' => variable_get('field_collection_table_format_form', TRUE),
   );
+  $form['field_collection_table_hide_empty'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Hide empty columns'),
+    '#description' => t('If checked, hide empty Field Collection table columns.'),
+    '#default_value' => variable_get('field_collection_table_hide_empty', FALSE),
+  );
 
   return system_settings_form($form);
 }
