Index: release/project_release.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/project/release/project_release.module,v
retrieving revision 1.58
diff -u -r1.58 project_release.module
--- release/project_release.module	21 Jan 2008 23:32:12 -0000	1.58
+++ release/project_release.module	22 Jan 2008 02:46:17 -0000
@@ -1609,6 +1609,7 @@
   if (empty($title)) {
     $title = t('Version');
   }
+  $recommended = ($table_type == 'recommended');
   // Generate the cache ID.
   $cid = 'table:'. $project->nid .':'. $table_type .':'. $release_type .':'. $title .':'. (int)$print_size;
   if ($cached = cache_get($cid, 'cache_project_release')) {
@@ -1628,9 +1629,10 @@
     }
   }
 
-  if ($table_type == 'recommended') {
+  if ($recommended) {
     if ($tids) {
-      $join .= ' INNER JOIN {project_release_supported_versions} prsv ON prsv.nid = r.pid AND prsv.tid = tn.tid AND prsv.major = r.version_major AND prsv.recommended = 1 ';
+      $selects[] = 'prsv.recommended';
+      $join .= ' INNER JOIN {project_release_supported_versions} prsv ON prsv.nid = r.pid AND prsv.tid = tn.tid AND prsv.major = r.version_major AND prsv.supported = 1 ';
     }
     else {
       // TODO
@@ -1651,14 +1653,13 @@
       $orderby[] = 'r.rebuild'. (($table_type == 'recommended') ? ' DESC' : '');
       break;
   }
-
   $orderby[] = 'r.version_major';
   $orderby[] = 'r.version_minor';
   $orderby[] = 'r.version_patch';
   $orderby[] = 'r.file_date';
 
   if ($orderby) {
-    $order_by = ' ORDER BY '. implode(', ', $orderby);
+    $order_by = ' ORDER BY '. implode($recommended ? ' DESC, ' : ', ', $orderby);
   }
   if ($selects) {
     $select = implode(', ', $selects) .',';
@@ -1677,54 +1678,92 @@
       "INNER JOIN {project_release_nodes} r ON r.nid = n.nid ".
       "WHERE (r.pid = %d) AND (n.status = 1) ". $where), $project->nid);
   }
-
   $items = array();
   $can_edit = node_access('update', $project);
+  $added_majors = array();
+  $icons = array('ok' => theme('image', 'misc/watchdog-ok.png', t('ok'), t('ok')),
+                 'warning' => theme('image', 'misc/watchdog-warning.png', t('warning'), t('warning')),
+                 'error' => theme('image', 'misc/watchdog-error.png', t('error'), t('error')));
+  $stable_version = FALSE;
 
   while ($release = db_fetch_object($result)) {
-    $links = array();
-    if (!empty($release->file_path)) {
-      $links['project_release_download'] = theme('project_release_download_link', $release->file_path, t('Download'), TRUE);
-    }
-    $links['project_release_notes'] = array(
-      'title' => t('Release notes'),
-      'href' => "node/$release->nid",
-    );
-    if ($can_edit) {
-      $links['project_release_edit'] = array(
-        'title' => t('Edit'),
-        'href' => "node/$release->nid/edit",
+    if (!in_array($release->version_major .'--'. $release->tid, $added_majors)) {
+      $links = array();
+      if (!empty($release->file_path)) {
+        $links['project_release_download'] = theme('project_release_download_link', $release->file_path, t('Download'), TRUE);
+      }
+      $links['project_release_notes'] = array(
+        'title' => t('Release notes'),
+        'href' => "node/$release->nid",
       );
-    }
-    if (!isset($items[$release->tid]) || !is_array($items[$release->tid])) {
-      $items[$release->tid] = array();
-    }
-
-    $row = array(
-      // class of <tr>
-      'class' => $release->rebuild ? 'release-dev' : 'release',
-      'data' => array(
-        array(
-          'class' => 'release-title',
-          'data' => l($release->version, "node/$release->nid"),
-        ),
-        array(
-          'class' => 'release-date',
-          'data' => !empty($release->file_path) ? format_date($release->file_date, 'custom', 'Y-M-d') : format_date($release->created, 'custom', 'Y-M-d'),
+      if ($can_edit) {
+        $links['project_release_edit'] = array(
+          'title' => t('Edit'),
+          'href' => "node/$release->nid/edit",
+        );
+      }
+      if (!isset($items[$release->tid]) || !is_array($items[$release->tid])) {
+        $items[$release->tid] = array();
+      }
+      $icon = ($release->rebuild ? 'error' : ($release->recommended ? 'ok' : 'warning'));
+      if ($icon == 'ok') {
+        $stable_version = TRUE;
+      }
+      $row = array(
+        // class of <tr>
+        'class' => ($release->rebuild ? 'release-dev ' : 'release ') . $icon,
+        'data' => array(
+          array(
+            'class' => 'release-title',
+            'data' => l($release->version, "node/$release->nid"),
+          ),
+          array(
+            'class' => 'release-date',
+            'data' => !empty($release->file_path) ? format_date($release->file_date, 'custom', 'Y-M-d') : format_date($release->created, 'custom', 'Y-M-d'),
+          ),
         ),
-      ),
-    );
-    if ($print_size) {
+      );
+      if ($print_size) {
+        $row['data'][] = array(
+          'class' => 'release-size',
+          'data' => !empty($release->file_path) ? format_size(filesize(file_create_path($release->file_path))) : t('n/a'),
+        );
+      }
+      $row['data'][] = array(
+        'class' => 'release-links',
+        'data' => theme('links', $links),
+      );
+      $reason = '';
+      switch ($icon) {
+        case 'ok':
+          $reason = t('Recommended release');
+          break;
+        case 'warning':
+          if ($stable_version) {
+            $reason = t('Supported release');
+          }
+          else {
+		    // @TODO: Make a better message here.
+            $reason = t('Supported release');
+          }
+          break;
+        case 'error':
+          $reason = t('Development release');
+          break;
+      }
+      $row['data'][] = array(
+        'class' => 'release-reason',
+        'data' => $reason,
+      );
       $row['data'][] = array(
-        'class' => 'release-size',
-        'data' => !empty($release->file_path) ? format_size(filesize(file_create_path($release->file_path))) : t('n/a'),
+        'class' => 'release-icon',
+        'data' => $icons[$icon],
       );
+      $items[$release->tid][] = $row;
+      if ($recommended) {
+        $added_majors[] = $release->version_major .'--'. $release->tid;
+      }
     }
-    $row['data'][] = array(
-      'class' => 'release-links',
-      'data' => theme('links', $links),
-    );
-    $items[$release->tid][] = $row;
   }
   $header = array(
     array(
@@ -1748,17 +1787,11 @@
 
   $rows = array();
   foreach ($items as $tid => $item) {
-    if ($table_type == 'recommended') {
-      // We only want the last entry in the array.
-      $rows[] = array_pop($item);
-    }
-    else {
-      $rows = array_merge($rows, $item);
-    }
+    $rows = array_merge($rows, $item);
   }
   $output = '';
   if (!empty($rows)) {
-    $output = theme('table', $header, $rows, array('class' => 'releases'));
+    $output = theme('table', $header, $rows, array('class' => 'releases system-status-report'));
   }
   // Default cache time is 12 hours - will be cleared by the packaging script
   cache_set($cid, 'cache_project_release', $output, time() + 43200);
