Index: modules/project/project.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/project/project.module,v retrieving revision 1.239.2.13.2.15 diff -u -p -r1.239.2.13.2.15 project.module --- modules/project/project.module 5 Dec 2006 11:38:16 -0000 1.239.2.13.2.15 +++ modules/project/project.module 5 Dec 2006 12:08:29 -0000 @@ -544,7 +544,7 @@ function project_page_overview($termname $release_settings['parameters'][] = $version; } else { - $release_settings['joins'] = array('INNER JOIN {project_release_nodes} prn ON p.version = prn.nid'); + $release_settings['joins'] = array('INNER JOIN {project_release_nodes} prn ON n.nid = prn.pid'); } $sql_settings = array_merge_recursive($sql_settings, $release_settings); } @@ -608,6 +608,16 @@ 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()) { @@ -627,11 +637,9 @@ function project_page_overview($termname unset($values); $values[] = $project->nid; if ($version != -1) { - $VERSION_JOIN = 'INNER JOIN {term_node} t ON p.nid = t.nid'; - $VERSION_WHERE = 'AND t.tid = %d'; $values[] = $version; } - $latest = db_fetch_object(db_query_range("SELECT file_path, version, file_date FROM {project_release_nodes} p $VERSION_JOIN WHERE p.pid = %d $VERSION_WHERE ORDER BY file_date DESC", $values, 0, 1)); + $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)); $project->file_path = $latest->file_path; $project->version = $latest->version; } 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 12:08:30 -0000 @@ -554,6 +554,19 @@ function project_release_db_save($node, } $values['nid'] = $node->nid; db_query($sql, $values); + + // If this is the first release for a given compatibility term, add + // a record into the {project_release_default_versions} table. + if ($is_new && module_exist('taxonomy')) { + $vid = _project_release_get_api_vid(); + if (isset($node->taxonomy[$vid])) { + $tid = $node->taxonomy[$vid]; + $has_default = db_result(db_query("SELECT COUNT(*) FROM {project_release_default_versions} WHERE nid = %d AND tid = %d", $node->pid, $tid)); + if (!$has_default) { + db_query("INSERT INTO {project_release_default_versions} (nid, tid, major) VALUES (%d, %d, %d)", $node->pid, $tid, $node->version_major); + } + } + } } /** @@ -834,7 +847,15 @@ function project_release_project_edit_re project_project_set_breadcrumb($node); drupal_set_title(check_plain($node->title)); - $form['releases'] = array( + $form['advanced'] = array( + '#type' => 'fieldset', + '#title' => t('Advanced options'), + '#collapsible' => TRUE, + '#collapsed' => TRUE, + '#weight' => 5, + ); + + $form['advanced']['releases'] = array( '#type' => 'checkbox', '#title' => t('Enable releases'), '#return_value' => 1, @@ -843,18 +864,60 @@ function project_release_project_edit_re '#description' => t('Allow releases of this project with specific versions.'), ); if ($node->releases) { - if ($releases = project_release_get_releases($node, false, 'version', 'files')) { - $form['version'] = array( - '#type' => 'select', - '#title' => t('Default version'), - '#default_value' => $node->version, - '#options' => $releases, - '#description' => t('Default version for downloading.'), - ); + $releases = array(); + if ($tree = project_release_get_api_taxonomy()) { + $query = db_query('SELECT tid, major FROM {project_release_default_versions} WHERE nid = %d', $node->nid); + $node->default_versions = array(); + while ($version = db_fetch_object($query)) { + $tid = $version->tid; + $major = $version->major; + $node->default_versions[$tid] = $major; + } + $result = db_query(db_rewrite_sql("SELECT n.nid, tn.tid, td.name, r.* FROM {node} n INNER JOIN {project_release_nodes} r ON r.nid = n.nid INNER JOIN {term_node} tn ON tn.nid = r.nid INNER JOIN {term_data} td ON tn.tid = td.tid WHERE (r.pid = %d) AND (n.status = 1) AND (r.file_path <> '') ORDER BY tn.tid, r.rebuild, r.version_major DESC, r.version_minor DESC, r.version_patch DESC, r.file_date DESC"), $node->nid); + while ($rel = db_fetch_object($result)) { + $tid = $rel->tid; + $major = $rel->version_major; + if (isset($major)) { + $releases[$tid]['majors'][$major] = $major; + } + $releases[$tid]['name'] = $rel->name; + if (!isset($releases[$tid]['current']) && $node->default_versions[$tid] == $major) { + $releases[$tid]['current'] = $rel->version; + } + } + $form['default_versions'] = array('#tree' => TRUE); + foreach ($tree as $term) { + $tid = $term->tid; + if (isset($releases[$tid])) { + $form['default_versions'][$tid] = array(); + if (count($releases[$tid]['majors']) > 1) { + $form['default_versions'][$tid]['major'] = array( + '#title' => t('Major version'), + '#type' => 'select', + '#options' => $releases[$tid]['majors'], + '#default_value' => isset($node->default_versions[$tid]) ? $node->default_versions[$tid] : 1, + ); + } + else { + $form['default_versions'][$tid]['major'] = array( + '#type' => 'value', + '#value' => current($releases[$tid]['majors']), + ); + } + $form['default_versions'][$tid]['current_release'] = array( + '#type' => 'value', + '#value' => $releases[$tid]['current'], + ); + $form['default_versions'][$tid]['name'] = array( + '#type' => 'value', + '#value' => $releases[$tid]['name'], + ); + } + } } if (user_access('administer projects')) { - $form['version_format'] = array( + $form['advanced']['version_format'] = array( '#type' => 'textfield', '#title' => t('Version format string'), '#default_value' => $node->version_format, @@ -876,6 +939,39 @@ function project_release_project_edit_re return drupal_get_form('project_release_project_edit_form', $form); } +function theme_project_release_project_edit_form($form) { + $output = ''; + $rows = array(); + if ($vocab = taxonomy_get_vocabulary(_project_release_get_api_vid())) { + $header = array( + check_plain($vocab->name), + t('Major version'), + t('Current release'), + ); + } + foreach (element_children($form['default_versions']) as $tid) { + $row = array(); + $row[] = check_plain($form['default_versions'][$tid]['name']['#value']); + unset($form['default_versions'][$tid]['major']['#title']); + if ($form['default_versions'][$tid]['major']['#type'] == 'select') { + $row[] = form_render($form['default_versions'][$tid]['major']); + } + else { + $row[] = check_plain($form['default_versions'][$tid]['major']['#value']); + } + $row[] = check_plain($form['default_versions'][$tid]['current_release']['#value']); + $rows[] = $row; + } + if (count($rows)) { + $output .= '