cvs diff: Diffing modules/project Index: modules/project/project.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/project/project.module,v retrieving revision 1.239.2.13.2.23 diff -u -p -r1.239.2.13.2.23 project.module --- modules/project/project.module 12 Dec 2006 16:42:59 -0000 1.239.2.13.2.23 +++ modules/project/project.module 16 Dec 2006 00:36:23 -0000 @@ -543,7 +543,17 @@ function project_page_overview($termname $release_settings['parameters'][] = $version; } else { - $release_settings['joins'] = array('INNER JOIN {project_release_nodes} prn ON n.nid = prn.pid'); + $release_settings['joins'] = array( + 'INNER JOIN {project_release_nodes} prn ON n.nid = prn.pid', + 'INNER JOIN {project_release_projects} prp ON n.nid = prp.nid', + ); + $release_settings['fields'][] = 'prp.snapshot_table'; + // We need to grab the uid and type for the project node, so + // that node_access() will work properly without a full + // node_load() when we're generating the download table in + // project_release_table(). + $release_settings['fields'][] = 'n.uid'; + $release_settings['fields'][] = 'n.type'; } $sql_settings = array_merge_recursive($sql_settings, $release_settings); } @@ -608,16 +618,6 @@ function project_page_overview($termname $result = db_query(db_rewrite_sql("SELECT n.nid, n.title, nr.teaser, nr.format$ISSUES FROM {node} n INNER JOIN {node_revisions} nr ON n.vid = nr.vid $ISSUE_JOIN WHERE n.status = 1 AND n.type = 'project_project' ORDER BY n.title ASC")); } $class = 'even'; - if ($version != -1) { - $joins = 'INNER JOIN {term_node} t ON p.nid = t.nid LEFT JOIN {project_release_default_versions} prdv ON p.pid = prdv.nid AND prdv.tid = t.tid AND prdv.major = p.version_major'; - $wheres = 'AND t.tid = %d'; - $order_bys = 'ORDER BY prdv.nid DESC, p.rebuild ASC, p.version_major ASC, p.version_minor DESC, p.version_patch DESC, p.file_date DESC'; - } - else { - $joins = ''; - $wheres = ''; - $order_bys = 'ORDER BY p.file_date DESC'; - } while ($project = db_fetch_object($result)) { $project->body = check_markup($project->teaser, $project->format, FALSE); if (project_use_taxonomy()) { @@ -631,22 +631,23 @@ function project_page_overview($termname } // Make sure we have the latest release - if ($project->release_count > 1) { - unset($values); - $values[] = $project->nid; - if ($version != -1) { - $values[] = $version; - } - $latest = db_fetch_object(db_query_range("SELECT file_path, version, file_date FROM {project_release_nodes} p $joins WHERE p.pid = %d $wheres $order_bys", $values, 0, 1)); + if ($project->release_count > 1 && $version != -1) { + $latest = db_fetch_object(db_query_range("SELECT file_path, version, file_date FROM {project_release_nodes} p INNER JOIN {term_node} t ON p.nid = t.nid LEFT JOIN {project_release_default_versions} prdv ON p.pid = prdv.nid AND prdv.tid = t.tid AND prdv.major = p.version_major WHERE p.pid = %d AND t.tid = %d ORDER BY prdv.nid DESC, p.rebuild ASC, p.version_major ASC, p.version_minor DESC, p.version_patch DESC, p.file_date DESC", $project->nid, $version, 0, 1)); $project->file_path = $latest->file_path; $project->version = $latest->version; } $project->links = array(); - - if ($project->file_path) { - $project->links[] = l(t('Download'), file_create_url($project->file_path)); + if ($version != -1) { + if ($project->file_path) { + $project->links[] = l(t('Download'), file_create_url($project->file_path)); + } + } + else { + $release_type = $project->snapshot_table ? 'all' : 'official'; + $project->download_table = project_release_table($project, 'defaults', $release_type, t('Version'), FALSE); } + $project->links[] = l(t('Find out more'), "node/$project->nid"); if ($project->issues) { @@ -875,6 +876,9 @@ function theme_project_summary($project) } $output .= $project->body; $output .= theme('links', $project->links); + if ($project->download_table) { + $output .= $project->download_table; + } if ($project->terms) { $output .= '
' . theme('links', $project->terms); } cvs diff: Diffing modules/project/po cvs diff: Diffing modules/project/po/ar cvs diff: Diffing modules/project/release Index: modules/project/release/project_release.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/project/release/project_release.module,v retrieving revision 1.1.2.54 diff -u -p -r1.1.2.54 project_release.module --- modules/project/release/project_release.module 14 Dec 2006 19:36:04 -0000 1.1.2.54 +++ modules/project/release/project_release.module 16 Dec 2006 00:36:24 -0000 @@ -1136,9 +1136,9 @@ function project_release_project_downloa return; } $output = '

' . t('Releases') . '

'; - $output .= project_release_table($node, 1, 1, FALSE, 'default-official', t('Official releases')); + $output .= project_release_table($node, 'defaults', 'official', t('Official releases')); if ($node->snapshot_table) { - $output .= project_release_table($node, 1, 3, FALSE, 'snapshot', t('Development snapshots')); + $output .= project_release_table($node, 'defaults', 'snapshot', t('Development snapshots')); } $links[] = l(t('View all releases'), 'node/'. $node->nid .'/release'); if (project_check_admin_access($node->nid)) { @@ -1148,7 +1148,30 @@ function project_release_project_downloa return $output; } -function project_release_table($project, $versions = 3, $releases_per_version = 3, $release_notes = FALSE, $filter = 'all', $title = NULL) { + +/** + * Generate a table of releases for a given project. + * @param $project + * The project object (as returned by node_load(), for example). + * + * @param $table_type + * Indicates what kind of table should be generated. Possible options: + * 'defaults': Only show the current default versions. + * 'all': Include all releases. + * + * @param $release_type + * Filter what kinds of releases are visible in the table. Possible options: + * 'official': Only include offical releases. + * 'snapshot': Only include development snapshots. + * 'all': Include all releases. + * + * @param $title + * The title of the first column in the table. Defaults to "Version" if NULL. + * + * @param $print_size + * Should the table include the filesize of each release? + */ +function project_release_table($project, $table_type = 'defaults', $release_type = 'all', $title = NULL, $print_size = TRUE) { if (empty($title)) { $title = t('Version'); } @@ -1164,37 +1187,27 @@ function project_release_table($project, $orderby[] = 'td.name'; } - if ($release_notes) { - $join .= ' INNER JOIN {node_revisions} nr ON nr.vid = n.vid '; - $selects[] = 'nr.body, nr.format'; + if ($table_type == 'defaults') { + if ($tids) { + $join .= ' INNER JOIN {project_release_default_versions} prdv ON prdv.nid = r.pid AND prdv.tid = tn.tid AND prdv.major = r.version_major '; + } + else { + // TODO + } } - if ($tids) { - $default_join = ' INNER JOIN {project_release_default_versions} prdv ON prdv.nid = r.pid AND prdv.tid = tn.tid AND prdv.major = r.version_major '; - } - else { - // TODO - $default_join = ''; - } - switch ($filter) { - case 'default-official': - $join .= $default_join; - $where = 'AND r.rebuild <> 1'; - break; - case 'default-all': - $join .= $default_join; - // Make sure snapshots come first so we only show official - // releases (if any) when limiting the # of rows in the table. - $orderby[] = 'r.rebuild DESC'; - break; + switch ($release_type) { case 'official': $where = 'AND r.rebuild <> 1'; break; case 'snapshot': $where = 'AND r.rebuild = 1'; break; - default: - $orderby[] = 'r.rebuild'; // make sure dev versions come last + case 'all': + // If we're generating the default releases table, we want the + // dev snapshots to be first in the query results, so that we + // skip over them and only show official releases (if any). + $orderby[] = 'r.rebuild' . (($table_type == 'defaults') ? ' DESC' : ''); break; } $orderby[] = 'r.version_major'; @@ -1214,6 +1227,15 @@ function project_release_table($project, "WHERE (r.pid = %d) AND (n.status = 1) " . $where . ' ' . $order_by), $project->nid); + if (!db_num_rows($result) && $release_type != 'official' && $tids) { + // Work-around for releases without a compatibility term + // (e.g. unclassified HEAD releases on drupal.org). + $result = db_query(db_rewrite_sql( + "SELECT n.nid, r.* FROM {node} n " . + "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); @@ -1229,7 +1251,8 @@ function project_release_table($project, if (!is_array($items[$release->tid])) { $items[$release->tid] = array(); } - $items[$release->tid][] = array( + + $row = array( // class of 'class' => $release->rebuild ? 'release-dev' : 'release', 'data' => array( @@ -1241,23 +1264,19 @@ function project_release_table($project, 'class' => 'release-date', 'data' => format_date($release->file_date, 'custom', 'Y-M-d'), ), - array( - 'class' => 'release-size', - 'data' => format_size(filesize(file_create_path($release->file_path))), - ), - array( - 'class' => 'release-links', - 'data' => theme('links', $links), - ), ), ); - if ($release_notes) { - $items[$release->tid][] = array( - 'colspan' => 4, - 'class' => 'release-notes', - 'data' => check_markup($release->body, $release->format, FALSE), + if ($print_size) { + $row['data'][] = array( + 'class' => 'release-size', + 'data' => format_size(filesize(file_create_path($release->file_path))), ); } + $row['data'][] = array( + 'class' => 'release-links', + 'data' => theme('links', $links), + ); + $items[$release->tid][] = $row; } $header = array( array( @@ -1267,24 +1286,27 @@ function project_release_table($project, 'class' => 'release-date', 'data' => t('Date'), ), - array( + ); + if ($print_size) { + $header[] = array( 'class' => 'release-size', 'data' => t('Size'), - ), - array( - 'class' => 'release-links', - 'data' => t('Links'), - ), + ); + } + $header[] = array( + 'class' => 'release-links', + 'data' => t('Links'), ); + $rows = array(); foreach ($items as $tid => $item) { - if ($releases_per_version) { - $hide_num = count($item) - $releases_per_version; - for ($i = 0; $i < $hide_num; $i++) { - array_shift($item); // pop off items we're not going to see. - } + if ($table_type == 'defaults') { + // 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)) {