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)) {