Index: release/views/project_release.views.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/project/release/views/project_release.views.inc,v
retrieving revision 1.12
diff -u -p -r1.12 project_release.views.inc
--- release/views/project_release.views.inc	1 Dec 2009 01:02:02 -0000	1.12
+++ release/views/project_release.views.inc	1 Dec 2009 09:10:47 -0000
@@ -115,6 +115,7 @@ function project_release_views_data() {
     ),
   );
 
+  // Custom field for a list of files attached to a release.
   $data['project_release_nodes']['files'] = array(
     'title' => t('Project release files'),
     'help' => t('All files attached to a release node.'),
@@ -135,6 +136,17 @@ function project_release_views_data() {
     ),
   );
 
+  // Custom field for aggregate file timestamp
+  $data['project_release_nodes']['file_timestamp'] = array(
+    'title' => t('File timestamp'),
+    'help' => t('The maximum or minimum timestamp for any files attached to this release.'),
+    'real field' => 'nid',
+    'field' => array(
+      'handler' => 'project_release_handler_field_release_file_timestamp',
+      'click sortable' => FALSE,
+     ),
+  );
+
   // rebuild
   $data['project_release_nodes']['rebuild'] = array(
     'title' => t('Development snapshot'),
@@ -636,6 +648,9 @@ function project_release_views_handlers(
       'project_release_handler_field_release_file_name' => array(
         'parent' => 'views_handler_field_file',
       ),
+      'project_release_handler_field_release_file_timestamp' => array(
+        'parent' => 'views_handler_field_date',
+      ),
       'project_release_handler_field_release_update_status' => array(
         'parent' => 'views_handler_field',
       ),
cvs diff: Diffing release/views/default_views
Index: release/views/default_views/project_release_download_table.view.php
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/project/release/views/default_views/project_release_download_table.view.php,v
retrieving revision 1.2
diff -u -p -r1.2 project_release_download_table.view.php
--- release/views/default_views/project_release_download_table.view.php	1 Dec 2009 01:02:02 -0000	1.2
+++ release/views/default_views/project_release_download_table.view.php	1 Dec 2009 09:10:47 -0000
@@ -87,7 +87,7 @@ $handler->override_option('fields', arra
     'field' => 'files',
     'relationship' => 'none',
   ),
-  'changed' => array(
+  'file_timestamp' => array(
     'label' => 'Date',
     'alter' => array(
       'alter_text' => 0,
@@ -112,10 +112,11 @@ $handler->override_option('fields', arra
     'empty_zero' => 0,
     'date_format' => 'custom',
     'custom_date_format' => 'Y-M-d',
+    'file_order' => 'MAX',
     'exclude' => 0,
-    'id' => 'changed',
-    'table' => 'node',
-    'field' => 'changed',
+    'id' => 'file_timestamp',
+    'table' => 'project_release_nodes',
+    'field' => 'file_timestamp',
     'relationship' => 'none',
   ),
   'view_node' => array(
@@ -343,7 +344,7 @@ $handler->override_option('style_options
   'columns' => array(
     'version' => 'version',
     'files' => 'files',
-    'changed' => 'changed',
+    'file_timestamp' => 'file_timestamp',
     'view_node' => 'view_node',
     'edit_node' => 'view_node',
   ),
@@ -355,8 +356,7 @@ $handler->override_option('style_options
     'files' => array(
       'separator' => '',
     ),
-    'changed' => array(
-      'sortable' => 0,
+    'file_timestamp' => array(
       'separator' => '',
     ),
     'view_node' => array(
@@ -366,7 +366,7 @@ $handler->override_option('style_options
       'separator' => '',
     ),
   ),
-  'default' => 'version',
+  'default' => '-1',
 ));
 $handler->override_option('row_options', array(
   'inline' => array(),
@@ -439,7 +439,7 @@ $handler->override_option('fields', arra
     'field' => 'files',
     'relationship' => 'none',
   ),
-  'changed' => array(
+  'file_timestamp' => array(
     'label' => 'Date',
     'alter' => array(
       'alter_text' => 0,
@@ -464,10 +464,14 @@ $handler->override_option('fields', arra
     'empty_zero' => 0,
     'date_format' => 'custom',
     'custom_date_format' => 'Y-M-d',
+    'file_order' => 'MAX',
     'exclude' => 0,
-    'id' => 'changed',
-    'table' => 'node',
-    'field' => 'changed',
+    'id' => 'file_timestamp',
+    'table' => 'project_release_nodes',
+    'field' => 'file_timestamp',
+    'override' => array(
+      'button' => 'Use default',
+    ),
     'relationship' => 'none',
   ),
   'view_node' => array(
@@ -687,7 +691,7 @@ $handler->override_option('style_options
   'columns' => array(
     'version' => 'version',
     'files' => 'files',
-    'changed' => 'changed',
+    'file_timestamp' => 'file_timestamp',
     'view_node' => 'view_node',
     'edit_node' => 'view_node',
     'update_status' => 'update_status',
@@ -700,8 +704,7 @@ $handler->override_option('style_options
     'files' => array(
       'separator' => '',
     ),
-    'changed' => array(
-      'sortable' => 0,
+    'file_timestamp' => array(
       'separator' => '',
     ),
     'view_node' => array(
cvs diff: Diffing release/views/handlers
Index: release/views/handlers/project_release_handler_field_release_file_timestamp.inc
===================================================================
RCS file: release/views/handlers/project_release_handler_field_release_file_timestamp.inc
diff -N release/views/handlers/project_release_handler_field_release_file_timestamp.inc
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ release/views/handlers/project_release_handler_field_release_file_timestamp.inc	1 Dec 2009 09:10:47 -0000
@@ -0,0 +1,56 @@
+<?php
+// $Id$
+
+class project_release_handler_field_release_file_timestamp extends views_handler_field_date {
+  function option_definition() {
+    $options = parent::option_definition();
+    $options['file_order'] = array('default' => 'MAX');
+    return $options;
+  }
+
+  function options_form(&$form, &$form_state) {
+    parent::options_form($form, $form_state);
+    $form['file_order'] = array(
+      '#title' => t('File timestamp order'),
+      '#description' => t('Should the maximum (newest) or minimum (oldest) timestamp be used?'),
+      '#type' => 'select',
+      '#options' => array(
+        'MAX' => t('Newest file'),
+        'MIN' => t('Oldest file'),
+      ),
+      '#default_value' => $this->options['file_order'],
+    );
+  }
+
+  /**
+   * Find the aggregate file timestamp data for each release in the result.
+   */
+  function pre_render($values) {
+    $this->items = array();
+    $nids = array();
+    foreach ($values as $result) {
+      $nids[] = $result->{$this->field_alias};
+    }
+    $function = $this->options['file_order'];
+    $placeholders = db_placeholders($nids);
+    $sql = "SELECT $function(f.timestamp) as timestamp, prf.nid FROM {project_release_file} prf INNER JOIN {files} f ON prf.fid = f.fid WHERE prf.nid IN ($placeholders) GROUP BY prf.nid";
+    $query = db_query($sql, $nids);
+    while ($file = db_fetch_object($query)) {
+      $this->items[$file->nid] = $file->timestamp;
+    }
+  }
+
+  function render($values) {
+    $nid = $values->{$this->field_alias};
+    if (!empty($this->items[$nid])) {
+      // Setup the timestamp that views_handler_field_date::render() expects.
+      $values->{$this->field_alias} = $this->items[$nid];
+    }
+    else {
+      $values->{$this->field_alias} = 0;
+    }
+    return parent::render($values);
+  }
+
+}
+
cvs diff: Diffing release/views/plugins
