? 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);