? project_release_tables_15.patch
? project_release_tables_16.patch
Index: /Applications/MAMP/htdocs/igorexchange/16feb08/public_html/sites/all/modules/project/release/project_release.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/project/release/project_release.module,v
retrieving revision 1.59
diff -u -p -r1.59 project_release.module
--- release/project_release.module 9 Feb 2008 00:26:36 -0000 1.59
+++ release/project_release.module 16 Feb 2008 18:06:41 -0000
@@ -1552,9 +1552,9 @@ function theme_project_release_project_d
return;
}
$output = '
'. t('Releases') .'
';
- $output .= project_release_table($node, 'recommended', 'official', t('Official releases'));
+ $output .= project_release_table($node, 'supported', 'official', t('Official releases'));
if ($node->snapshot_table) {
- $output .= project_release_table($node, 'recommended', 'snapshot', t('Development snapshots'));
+ $output .= project_release_table($node, 'supported', 'snapshot', t('Development snapshots'));
}
return $output;
}
@@ -1604,6 +1604,7 @@ function theme_project_release_table_ove
* @param $table_type
* Indicates what kind of table should be generated. Possible options:
* 'recommended': Only show the current recommended versions.
+ * 'supported': Only show the latest release from each supported branch.
* 'all': Include all releases.
*
* @param $release_type
@@ -1641,9 +1642,17 @@ function project_release_table($project,
}
}
- if ($table_type == 'recommended') {
+ if ($table_type == 'supported' || $table_type == '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';
+ $selects[] = 'prsv.snapshot';
+ $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 ';
+ if ($table_type == 'recommended') {
+ $join .= 'prsv.recommended = 1 ';
+ }
+ else {
+ $join .= 'prsv.supported = 1 ';
+ }
}
else {
// TODO
@@ -1665,10 +1674,10 @@ function project_release_table($project,
break;
}
- $orderby[] = 'r.version_major';
- $orderby[] = 'r.version_minor';
- $orderby[] = 'r.version_patch';
- $orderby[] = 'r.file_date';
+ $orderby[] = 'r.version_major DESC';
+ $orderby[] = 'r.version_minor DESC';
+ $orderby[] = 'r.version_patch DESC';
+ $orderby[] = 'r.file_date DESC';
if ($orderby) {
$order_by = ' ORDER BY '. implode(', ', $orderby);
@@ -1678,8 +1687,8 @@ function project_release_table($project,
}
$result = db_query(db_rewrite_sql(
"SELECT n.nid, n.created, $select r.* FROM {node} n ".
- "INNER JOIN {project_release_nodes} r ON r.nid = n.nid ". $join .
- "WHERE (r.pid = %d) AND (n.status = 1) ". $where .' '. $order_by),
+ "INNER JOIN {project_release_nodes} r ON r.nid = n.nid $join ".
+ "WHERE (r.pid = %d) AND (n.status = 1) $where $order_by"),
$project->nid);
if (!db_num_rows($result) && $release_type != 'official' && $tids) {
@@ -1693,51 +1702,90 @@ function project_release_table($project,
$items = array();
$can_edit = node_access('update', $project);
+ $stable_version = FALSE;
+ $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')),
+ );
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 ((!isset($added_majors[$release->tid][$release->version_major]) && ((!$release->snapshot && !$release->rebuild) || ($release->snapshot && $release->rebuild))) && !($recommended && !$release->recommended)) {
+ $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
- '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();
+ }
+ $classification = ($release->rebuild ? 'error' : ($release->recommended ? 'ok' : 'warning'));
+ if ($classification == 'ok') {
+ $stable_version = TRUE;
+ }
+ $row = array(
+ // class of
+ 'class' => ($release->rebuild ? 'release-dev ' : 'release ') . $classification,
+ '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 ($classification) {
+ 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-size',
- 'data' => !empty($release->file_path) ? format_size(filesize(file_create_path($release->file_path))) : t('n/a'),
+ 'class' => 'release-reason',
+ 'data' => $reason,
);
+ $row['data'][] = array(
+ 'class' => 'release-icon',
+ 'data' => $icons[$classification],
+ );
+ $items[$release->tid][] = $row;
+ $added_majors[$release->tid][$release->version_major] = TRUE;
}
- $row['data'][] = array(
- 'class' => 'release-links',
- 'data' => theme('links', $links),
- );
- $items[$release->tid][] = $row;
}
$header = array(
array(
@@ -1761,17 +1809,11 @@ function project_release_table($project,
$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);