Index: release/project_release.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/project/release/project_release.module,v
retrieving revision 1.137
diff -u -p -r1.137 project_release.module
--- release/project_release.module	28 Nov 2009 22:42:51 -0000	1.137
+++ release/project_release.module	29 Nov 2009 08:36:44 -0000
@@ -568,24 +568,12 @@ function project_release_view($node, $te
       $output .= t('Official release from CVS tag: @tag', array('@tag' => $node->project_release['tag'])) .'<br />';
     }
   }
-  if ($node->created) {
-    $output .= '<small>'. t('First released: !created', array('!created' => format_date($node->created))) .'</small><br />';
-  }
   if (!empty($node->project_release['files'])) {
-    foreach ($node->project_release['files'] as $fid => $file) {
-      // In the case of previews, we only have the fid of the file,
-      // so check for that and load the file object if necessary.
-      if (is_numeric($file)) {
-        $file = project_release_load_file($file);
-      }
-      // In the case of previews, if the file has been marked for deletion,
-      // then don't display.
-      if (empty($node->project_release_files[$fid]['delete'])) {
-        $output .= '<div class="project-release-download-file">';
-        $output .= theme('project_release_download_file', $file);
-        $output .= '</div>';
-      }
-    }
+    $view_info = variable_get('project_release_files_view', 'project_release_files:default');
+    list($view_name, $display_name) = split(':', $view_info);
+    $view_args = array($node->nid);
+    $view = views_get_view($view_name);
+    $output .= $view->preview($display_name, $view_args);
   }
 
   if (module_exists('project_usage') && user_access('view project usage')) {
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.10
diff -u -p -r1.10 project_release.views.inc
--- release/views/project_release.views.inc	28 Nov 2009 21:11:47 -0000	1.10
+++ release/views/project_release.views.inc	29 Nov 2009 08:36:45 -0000
@@ -331,6 +331,50 @@ function project_release_views_data() {
       'field' => 'fid',
     ),
   );
+  $data['project_release_file']['fid'] = array(
+    'title' => t('Release file ID'),
+    'relationship' => array(
+      'base' => 'files',
+      'handler' => 'views_handler_relationship',
+      'label' => t('Release file'),
+      'help' => t('Add a relationship to gain access to file data for the files attached to releases.'),
+    ),
+  );
+  $data['project_release_file']['file_name'] = array(
+    'real field' => 'fid',
+    'title' => t('Release file name'),
+    'help' => t('The name of a file attached to a release node.'),
+    'field' => array(
+      'handler' => 'project_release_handler_field_release_file_name',
+      'click sortable' => TRUE,
+    ),
+  );
+  $data['project_release_file']['nid'] = array(
+    'title' => t('Release node ID'),
+    'relationship' => array(
+      'base' => 'node',
+      'handler' => 'views_handler_relationship',
+      'label' => t('Release node'),
+      'help' => t('Add a relationship to gain access to node data for the releases that files are attached to.'),
+    ),
+  );
+  $data['project_release_file']['filehash'] = array(
+    'title' => t('Release file hash'),
+    'help' => t('The file hash (e.g. md5) of a file attached to a release node.'),
+    'field' => array(
+      'handler' => 'views_handler_field',
+      'click sortable' => TRUE,
+    ),
+    'filter' => array(
+      'handler' => 'views_handler_filter_string',
+    ),
+    'sort' => array(
+      'handler' => 'views_handler_sort',
+    ),
+    'argument' => array(
+      'handler' => 'views_handler_argument_string',
+    ),
+  );
 
   $data['project_release_supported_versions']['table']['group']  = t('Project release');
   // We only want to JOIN on this table via explicit relationships.
@@ -589,6 +633,9 @@ function project_release_views_handlers(
       'project_release_handler_field_most_recent_release' => array(
         'parent' => 'views_handler_field_date',
       ),
+      'project_release_handler_field_release_file_name' => array(
+        'parent' => 'views_handler_field_file',
+      ),
       '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_files.view.php
===================================================================
RCS file: release/views/default_views/project_release_files.view.php
diff -N release/views/default_views/project_release_files.view.php
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ release/views/default_views/project_release_files.view.php	29 Nov 2009 08:36:45 -0000
@@ -0,0 +1,235 @@
+<?php
+// $Id$
+
+$view = new view;
+$view->name = 'project_release_files';
+$view->description = 'List of all files attached to a given release';
+$view->tag = 'Project release';
+$view->view_php = '';
+$view->base_table = 'files';
+$view->is_cacheable = FALSE;
+$view->api_version = 2;
+$view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */
+$handler = $view->new_display('default', 'Defaults', 'default');
+$handler->override_option('relationships', array(
+  'nid' => array(
+    'label' => 'Release node',
+    'required' => 1,
+    'id' => 'nid',
+    'table' => 'project_release_file',
+    'field' => 'nid',
+    'relationship' => 'none',
+  ),
+));
+$handler->override_option('fields', array(
+  'file_name' => array(
+    'label' => 'Download',
+    'alter' => array(
+      'alter_text' => 0,
+      'text' => '',
+      'make_link' => 0,
+      'path' => '',
+      'link_class' => '',
+      'alt' => '',
+      'prefix' => '',
+      'suffix' => '',
+      'target' => '',
+      'help' => '',
+      'trim' => 0,
+      'max_length' => '',
+      'word_boundary' => 1,
+      'ellipsis' => 1,
+      'strip_tags' => 0,
+      'html' => 0,
+    ),
+    'empty' => '',
+    'hide_empty' => 0,
+    'empty_zero' => 0,
+    'link_to_file' => 1,
+    'exclude' => 0,
+    'id' => 'file_name',
+    'table' => 'project_release_file',
+    'field' => 'file_name',
+    'relationship' => 'none',
+  ),
+  'filesize' => array(
+    'label' => 'Size',
+    'alter' => array(
+      'alter_text' => 0,
+      'text' => '',
+      'make_link' => 0,
+      'path' => '',
+      'link_class' => '',
+      'alt' => '',
+      'prefix' => '',
+      'suffix' => '',
+      'target' => '',
+      'help' => '',
+      'trim' => 0,
+      'max_length' => '',
+      'word_boundary' => 1,
+      'ellipsis' => 1,
+      'strip_tags' => 0,
+      'html' => 0,
+    ),
+    'empty' => '',
+    'hide_empty' => 1,
+    'empty_zero' => 0,
+    'file_size_display' => 'formatted',
+    'exclude' => 0,
+    'id' => 'filesize',
+    'table' => 'files',
+    'field' => 'filesize',
+    'relationship' => 'none',
+  ),
+  'timestamp' => array(
+    'label' => 'Last updated',
+    'alter' => array(
+      'alter_text' => 0,
+      'text' => '',
+      'make_link' => 0,
+      'path' => '',
+      'link_class' => '',
+      'alt' => '',
+      'prefix' => '',
+      'suffix' => '',
+      'target' => '',
+      'help' => '',
+      'trim' => 0,
+      'max_length' => '',
+      'word_boundary' => 1,
+      'ellipsis' => 1,
+      'strip_tags' => 0,
+      'html' => 0,
+    ),
+    'empty' => '',
+    'hide_empty' => 0,
+    'empty_zero' => 0,
+    'date_format' => 'small',
+    'custom_date_format' => '',
+    'exclude' => 0,
+    'id' => 'timestamp',
+    'table' => 'files',
+    'field' => 'timestamp',
+    'relationship' => 'none',
+  ),
+  'filehash' => array(
+    'label' => 'md5 hash',
+    'alter' => array(
+      'alter_text' => 0,
+      'text' => '',
+      'make_link' => 0,
+      'path' => '',
+      'link_class' => '',
+      'alt' => '',
+      'prefix' => '',
+      'suffix' => '',
+      'target' => '',
+      'help' => '',
+      'trim' => 0,
+      'max_length' => '',
+      'word_boundary' => 1,
+      'ellipsis' => 1,
+      'strip_tags' => 0,
+      'html' => 0,
+    ),
+    'empty' => '',
+    'hide_empty' => 1,
+    'empty_zero' => 0,
+    'exclude' => 0,
+    'id' => 'filehash',
+    'table' => 'project_release_file',
+    'field' => 'filehash',
+    'relationship' => 'none',
+  ),
+));
+$handler->override_option('sorts', array(
+  'fid' => array(
+    'order' => 'DESC',
+    'id' => 'fid',
+    'table' => 'files',
+    'field' => 'fid',
+    'relationship' => 'none',
+  ),
+));
+$handler->override_option('arguments', array(
+  'nid' => array(
+    'default_action' => 'not found',
+    'style_plugin' => 'default_summary',
+    'style_options' => array(),
+    'wildcard' => 'all',
+    'wildcard_substitution' => 'All',
+    'title' => '',
+    'breadcrumb' => '',
+    'default_argument_type' => 'fixed',
+    'default_argument' => '',
+    'validate_type' => 'node',
+    'validate_fail' => 'not found',
+    'break_phrase' => 0,
+    'not' => 0,
+    'id' => 'nid',
+    'table' => 'node',
+    'field' => 'nid',
+    'relationship' => 'nid',
+    'validate_user_argument_type' => 'uid',
+    'validate_user_roles' => array(),
+    'default_options_div_prefix' => '',
+    'default_argument_user' => 0,
+    'default_argument_fixed' => '',
+    'default_argument_php' => '',
+    'validate_argument_node_type' => array(
+      'project_release' => 'project_release',
+    ),
+    'validate_argument_node_access' => 0,
+    'validate_argument_nid_type' => 'nid',
+    'validate_argument_vocabulary' => array(),
+    'validate_argument_type' => 'tid',
+    'validate_argument_transform' => 0,
+    'validate_user_restrict_roles' => 0,
+    'validate_argument_project_term_vocabulary' => array(),
+    'validate_argument_project_term_argument_type' => 'tid',
+    'validate_argument_project_term_argument_action_top_without' => 'pass',
+    'validate_argument_project_term_argument_action_top_with' => 'pass',
+    'validate_argument_project_term_argument_action_child' => 'pass',
+    'validate_argument_php' => '',
+  ),
+));
+$handler->override_option('access', array(
+  'type' => 'none',
+));
+$handler->override_option('cache', array(
+  'type' => 'none',
+));
+$handler->override_option('items_per_page', 0);
+$handler->override_option('style_plugin', 'table');
+$handler->override_option('style_options', array(
+  'grouping' => '',
+  'override' => 1,
+  'sticky' => 0,
+  'order' => 'asc',
+  'columns' => array(
+    'file_name' => 'file_name',
+    'filesize' => 'filesize',
+    'timestamp' => 'timestamp',
+    'filehash' => 'filehash',
+  ),
+  'info' => array(
+    'file_name' => array(
+      'sortable' => 1,
+      'separator' => '',
+    ),
+    'filesize' => array(
+      'sortable' => 1,
+      'separator' => '',
+    ),
+    'timestamp' => array(
+      'sortable' => 1,
+      'separator' => '',
+    ),
+    'filehash' => array(
+      'sortable' => 1,
+      'separator' => '',
+    ),
+  ),
+  'default' => '-1',
+));
cvs diff: Diffing release/views/handlers
Index: release/views/handlers/project_release_handler_field_release_file_name.inc
===================================================================
RCS file: release/views/handlers/project_release_handler_field_release_file_name.inc
diff -N release/views/handlers/project_release_handler_field_release_file_name.inc
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ release/views/handlers/project_release_handler_field_release_file_name.inc	29 Nov 2009 08:36:45 -0000
@@ -0,0 +1,38 @@
+<?php
+// $Id$
+
+/**
+ * Field handler for release files that honors project_release_download_link.
+ */
+class project_release_handler_field_release_file_name extends views_handler_field_file {
+
+  /**
+   * Conditionally provide additional fields to add.
+   */
+  function init(&$view, &$options) {
+    parent::init($view, $options);
+    $this->additional_fields['filename'] = array('table' => 'files', 'field' => 'filename');
+    if (!empty($options['link_to_file'])) {
+      $this->additional_fields['filepath'] = array('table' => 'files', 'field' => 'filepath');
+    }
+  }
+
+  /**
+   * Render whatever the data is as a link to the file.
+   *
+   * Data should be made XSS safe prior to calling this function.
+   * This honors theme_project_release_download_link() which supports the
+   * 'project_release_download_base' setting.
+   */
+  function render_link($data, $values) {
+    if (!empty($this->options['link_to_file']) && $data !== NULL && $data !== '') {
+      $this->options['alter']['make_link'] = TRUE;
+      $filepath = $values->{$this->aliases['filepath']};
+      $link = theme('project_release_download_link', $filepath, NULL, TRUE);
+      $this->options['alter']['path'] = $link['href'];
+    }
+    return check_plain($values->{$this->aliases['filename']});
+  }
+
+}
+
