cvs diff: Diffing modules/project/release
Index: modules/project/release/project_release.css
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/project/release/project_release.css,v
retrieving revision 1.1.2.2
diff -u -p -r1.1.2.2 project_release.css
--- modules/project/release/project_release.css 12 Nov 2006 13:52:35 -0000 1.1.2.2
+++ modules/project/release/project_release.css 5 Dec 2006 23:25:12 -0000
@@ -16,3 +16,31 @@
}
.node-form .project-release .version-elements fieldset {display: inline-table;}
+
+/********************
+* CSS possibilities
+*/
+table.releases {
+ width: 100%;
+}
+
+table.releases .release-title {
+ width: 30%;
+}
+
+table.releases .release-date {
+ width: 30%;
+}
+
+table.releases .release-size {
+ width: 15%;
+}
+
+table.releases .release-links {
+ width: 25%;
+}
+
+table.releases .release-dev {
+/* font-size: 0.85em; */
+/* border-top: 2px solid; */
+}
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.44
diff -u -p -r1.1.2.44 project_release.module
--- modules/project/release/project_release.module 5 Dec 2006 11:38:16 -0000 1.1.2.44
+++ modules/project/release/project_release.module 5 Dec 2006 23:25:13 -0000
@@ -1016,16 +1016,152 @@ function project_release_project_nodeapi
* TODO: this should be themeable.
*/
function project_release_project_download_table($node) {
- $release = node_load($node->version);
- // Make sure the release we think is the default is valid...
- if ($release->type == 'project_release' && $release->pid == $node->nid) {
- $links[] = l(t('Download default release (%version, %date, %size)', array('%version' => $release->version, '%date' => format_date($release->file_date, 'small'), '%size' => format_size(filesize($release->file_path)))), file_create_url($release->file_path));
- }
+ $output = '
' . t('Releases') . '
';
+ $output .= project_release_table($node, 1, 1, FALSE, 'default');
$links[] = l(t('View all releases'), 'node/'. $node->nid .'/release');
if (project_check_admin_access($node->nid)) {
$links[] = l(t('Add new release'), 'node/add/project_release/'. $node->nid);
}
- return theme('item_list', $links, t('Releases'));
+ $output .= theme('item_list', $links, '');
+ return $output;
+}
+
+function project_release_table($project, $versions = 3, $releases_per_version = 3, $release_notes = FALSE, $filter = 'all', $title = NULL) {
+ if (empty($title)) {
+ $title = t('Version');
+ }
+ $select = $join = $where = $order_by = '';
+ $tids = project_release_compatibility_list();
+ if ($tids) {
+ unset($tids[-1]); // get rid of that one.
+ $join = ' INNER JOIN {term_node} tn ON n.nid = tn.nid AND tn.tid in ('
+ . implode(',', array_keys($tids)) . ') '
+ . ' INNER JOIN {term_data} td ON td.tid = tn.tid ';
+ $selects[] = 'tn.tid';
+ $orderby[] = 'td.weight';
+ $orderby[] = 'td.name';
+ }
+
+ if ($release_notes) {
+ $join .= ' INNER JOIN {node_revisions} nr ON nr.vid = n.vid ';
+ $selects[] = 'nr.body, nr.format';
+ }
+
+ switch ($filter) {
+ case 'default':
+ 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 ';
+ // make sure dev versions come first, so we only use them if
+ // there are no official releases.
+ $orderby[] = 'r.rebuild DESC';
+ }
+ else {
+ // TODO!
+ }
+ break;
+ case 'official':
+ $where = 'AND r.rebuild <> 1';
+ break;
+ case 'snapshot':
+ $where = 'AND r.rebuild = 1';
+ // no break, use defaults
+ default:
+ $orderby[] = 'r.rebuild'; // make sure dev versions come last
+ 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);
+ }
+ if ($selects) {
+ $select = implode(', ', $selects) . ',';
+ }
+ $result = db_query(db_rewrite_sql(
+ "SELECT n.nid, $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),
+ $project->nid);
+
+ $items = array();
+ $can_edit = node_access('update', $project);
+
+ while ($release = db_fetch_object($result)) {
+ $links = array(
+ l(t('Download'), file_create_url($release->file_path)),
+ );
+
+ if ($can_edit) {
+ $links[] = l(t('Edit'), "node/$release->nid/edit");
+ }
+ if (!is_array($items[$release->tid])) {
+ $items[$release->tid][] = array();
+ }
+ $items[$release->tid][] = 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' => format_date($release->file_date),
+ ),
+ array(
+ 'class' => 'release-size',
+ 'data' => format_size(filesize(file_create_path($release->file_path))),
+ ),
+ array(
+ 'class' => 'release-links',
+ 'data' => implode(' | ', $links),
+ ),
+ ),
+ );
+ if ($release_notes) {
+ $items[$release->tid][] = array(
+ 'colspan' => 4,
+ 'class' => 'release-notes',
+ 'data' => check_markup($release->body, $release->format, FALSE),
+ );
+ }
+ }
+ $header = array(
+ array(
+ 'class' => 'release-title',
+ 'data' => $title),
+ array(
+ 'class' => 'release-date',
+ 'data' => t('Date'),
+ ),
+ array(
+ 'class' => 'release-size',
+ 'data' => t('Size'),
+ ),
+ array(
+ 'class' => 'release-links',
+ 'data' => t('Operations'),
+ ),
+ );
+
+ 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.
+ }
+ }
+ $rows = array_merge($rows, $item);
+ }
+ $output = '';
+ if (!empty($rows)) {
+ $output = theme('table', $header, $rows, array('class' => 'releases'));
+ }
+ return $output;
}
/**