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; } /**